ステップ 2 - 書式を指定するプロパティを実装する

提供: RAD Studio
移動先: 案内検索

既存のコンポーネントを拡張してスタイル付きの FireMonkey コンポーネントを作成する への移動


ステップ 1 で作成した TClockLabel コンポーネントに、現在時刻を表示するときに使用する日時の書式をプロパティとして定義し、コンポーネント ユーザーが指定できるようにする必要があります。

書式を指定するプロパティを実装する

Format プロパティを実装するために、TClockLabel クラスの published セクションに次の 1 行を追加します。

Delphi の場合:

 property Format: String;

C++ の場合:

__property String Format;

さらに、public セクションに次のようにコンストラクタの定義を追加します。

Delphi の場合:

 constructor Create(AOwner: TComponent); override;

C++ の場合:

__fastcall TClockLabel(TComponent* Owner);

書式が変更されると、ラベルを更新しなければなりません。 ラベルの更新を処理するための UpdateLabel メソッドを private メンバとして追加します。

コードは次のようになります。

Delphi の場合:

type
TClockLabel = class(TLabel)
private
  { Private declarations }
  procedure UpdateLabel;
protected
  { Protected declarations }
public
  { Public declarations }
  constructor Create(AOwner: TComponent); override;
published
  { Published declarations }
  property Format: String;
end;

C++ の場合:

//header file
class PACKAGE TClockLabel : public TLabel {
private:
	void __fastcall UpdateLabel(void);

protected:
public:
	__fastcall TClockLabel(TComponent* Owner);

__published:
	__property String Format;
};

この行を追加した後で、Ctrl+Shift+C を押します。 すると、Format プロパティの設定アクセサ メソッドとコンストラクタのスケルトンが IDE により自動的に追加されます。 これでコードは次のようになります。

Delphi の場合:

type
TClockLabel = class(TLabel)
private
  FFormat: String;
  procedure SetFormat(const Value: String);
public
  constructor Create(AOwner: TComponent); override;
published
  property Format: String read FFormat write SetFormat;
end;


{ TClockLabel }

constructor TClockLabel.Create(AOwner: TComponent);
begin
  inherited;
end;

procedure TClockLabel.UpdateLabel;
begin

end;

procedure TClockLabel.SetFormat(const Value: String);
begin
  FFormat := Value;
end;

C++ の場合:

//header file
class PACKAGE TClockLabel : public TLabel {
private:
	String FFormat;

	void __fastcall UpdateLabel(void);
	void __fastcall SetFormat(const String Value);

protected:
public:
	__fastcall TClockLabel(TComponent* Owner) ;

__published:
	__property String Format = {read = FFormat, write = SetFormat};
};


//source file 
__fastcall TClockLabel::TClockLabel(TComponent* Owner) : TLabel(Owner) {
}
void __fastcall TClockLabel::UpdateLabel(void) {
}

void __fastcall TClockLabel::SetFormat(const String Value) {
	FFormat = Value;
}

System.SysUtils.DateTimeToString のドキュメントによると、日時形式の一般的な値は 'c' です。そのため、FFormat フィールドを 'c' で初期化します。

Delphi の場合

constructor TClockLabel.Create(AOwner: TComponent);
begin
  inherited;
  FFormat := 'c';
end;

C++ の場合:

//source file
__fastcall TClockLabel::TClockLabel(TComponent* Owner) : TLabel(Owner) {
	FFormat = 'c';
}

さらに、UpdateLabel メソッドと SetFormat メソッドを次のように実装します。

Delphi の場合:

procedure TClockLabel.UpdateLabel;
begin
  Text := FormatDateTime(FFormat, Now);
end;

procedure TClockLabel.SetFormat(const Value: String);
begin
  FFormat := Value;
  UpdateLabel;
end;

C++ の場合:

void __fastcall TClockLabel::UpdateLabel(void) {
	Text = FormatDateTime(FFormat, Now());
}

void __fastcall TClockLabel::SetFormat(const String Value) {
	FFormat = Value;
	UpdateLabel();
}

親コンポーネントのスタイルを継承する

コンポーネントにその親コンポーネントのスタイルを継承させたい場合には、次のコードを使用します:

Delphi:
type
TClockLabel = class(TLabel)
private
  { Private declarations }
  procedure UpdateLabel;
  function GetDefaultStyleLookupName: string; override;
protected
  { Protected declarations }
public
  { Public declarations }
  constructor Create(AOwner: TComponent); override;
published
  { Published declarations }
  property Format: String;
end;
function TMyButton.GetDefaultStyleLookupName: string;
begin
  Result := Self.GetParentClassStyleLookupName; // stylename of the parent component
end;
C++:
//header file
class PACKAGE TClockLabel : public TLabel {
private:
	void __fastcall UpdateLabel(void);
	System::UnicodeString __fastcall GetDefaultStyleLookupName(void);
protected:
public:
	__fastcall TClockLabel(TComponent* Owner);

__published:
	__property String Format;
};
System::UnicodeString __fastcall TClockLabel::GetDefaultStyleLookupName() {
	return this->GetParentClassStyleLookupName(); // stylename of the parent component
}

前へ

次へ

関連項目