ステップ 3 - TTimer を使用して TClockLabel を毎秒更新する

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

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


このチュートリアルでは、TClockLabel を毎秒更新できるよう、TTimer コンポーネントを内部的に使用します。 TClockLabel コンポーネント内で TTimer コンポーネントを使用するには、以下の処理を行う必要があります。

  • TClockLabel のコンストラクタで TTimer のインスタンスを作成する。
  • 1 秒ごとに OnTimer イベントを発生させるよう TTimer コンポーネントを構成する。
  • OnTimer イベントが発生したときに Text プロパティを更新する。
  • TClockLabel のデストラクタで TTimer のインスタンスを破棄する。

これらの処理を行うために、以下のメンバの定義を追加します(既に作成したメンバはここに示していません)。

Delphi の場合:

type
TClockLabel = class(TLabel)
private
  FTimer: TTimer;
  procedure OnTimer(Sender: TObject);
public
  destructor Destroy; override;
end;

C++ の場合:

class PACKAGE TClockLabel : public TLabel {
private:

	TTimer* FTimer;

	void __fastcall OnTimer(TObject* Sender);

public:
	__fastcall ~TClockLabel(void);
};

以前のステップと同様に、Ctrl+Shift+C を押すとメソッドのプレースホルダが作成されます。 メソッドを次のように実装します:

Delphi の場合:

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

  // No need to use TTimercompoment at design time.
  if not (csDesigning in ComponentState) then
  begin
    FTimer := TTimer.Create(AOwner);
    FTimer.OnTimer := OnTimer;
    FTimer.Interval := 1000;
    FTimer.Enabled := True;
  end;

  UpdateLabel;
end;

destructor TClockLabel.Destroy;
begin
  FreeAndNil(FTimer);
  inherited;
end;

procedure TClockLabel.OnTimer(Sender: TObject);
begin
  UpdateLabel;
end;

C++ の場合:

__fastcall TClockLabel::TClockLabel(TComponent* Owner) : TLabel(Owner) {

	FFormat = 'c';

	FTimer = new TTimer(Owner);
	FTimer->OnTimer = OnTimer;
	FTimer->Interval = 1000;
	FTimer->Enabled = true;

	UpdateLabel();
}

__fastcall TClockLabel::~TClockLabel() {
	FreeAndNil(FTimer);
}

void __fastcall TClockLabel::OnTimer(TObject* Sender) {
	UpdateLabel();
}

お気付きのように、TTimer のインスタンスを作成するかどうかは ComponentState プロパティによって決まります。 これは、設計時(IDE で実行しているとき)にはラベルを更新する必要がないためです。 IDE の外部で(標準のアプリケーションとして)コンポーネントを実行するときにだけ TTimer コンポーネントを作成するよう制限しています。

これで TClockLabel コンポーネントが実装されました。 [プロジェクト マネージャ]で、TClockLabel.bpl パッケージを右クリックし、コンテキスト メニューから[ビルド]を選択します。 そして、[インストール]を選択して、開発されたコンポーネント パッケージをインストールし、コンポーネントを登録します:

ClockLabeIContextMenu.png

これで、TClockLabel のコンポーネントの新しい動作が、フォーム デザイナ で参照可能になりました。

前へ

次へ