Schritt 3 - Verwenden von TTimer zum sekündlichen Aktualisieren von TClockLabel

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Erstellen einer mit Stilen versehenen FireMonkey-Komponente durch Erweitern einer vorhandenen Komponente


In diesem Tutorial wird die TTimer-Komponente intern verwendet, um TClockLabel sekundenweise zu aktualisieren. Zur Verwendung der TTimer-Komponente in der TClockLabel-Komponente müssen Sie:

  • Ein Instanz von TTimer im Konstruktor von TClockLabel erstellen.
  • Die TTimer-Komponente so konfigurieren, dass sie jede Sekunde das Ereignis OnTimer auslöst.
  • Die Eigenschaft Text aktualisieren, wenn das Ereignis OnTimer ausgelöst wird.
  • Die Instanz von TTimer im Destruktor von TClockLabel freigeben.

Definieren Sie dazu die folgenden zusätzlichen Member (Member, die zuvor erstellt wurden, sind hier nicht aufgeführt):

In Delphi:

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

In C++:

class PACKAGE TClockLabel : public TLabel {
private:

	TTimer* FTimer;

	void __fastcall OnTimer(TObject* Sender);

public:
	__fastcall ~TClockLabel(void);
};

Wie in den vorherigen Schritten werden durch Drücken von STRG+UMSCHALT+C Platzhalter für diese Methoden erstellt.

Implementieren Sie diese Methoden folgendermaßen:

In Delphi:

constructor TClockLabel.Create(AOwner: TComponent);
 begin
   FFormat := 'c';
   inherited;
 
   // No need to use TTimer compoment 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;

In 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();
}

Wie Sie wahrscheinlich bemerkt haben, ist die erstellte Instanz von TTimer von der Eigenschaft ComponentState abhängig. Und zwar, weil die Beschriftung (Label) zur Entwurfszeit (wenn Sie in der IDE ausgeführt wird) nicht aktualisiert werden muss. Dadurch wird die Erstellung der TTimer-Komponente auf die Ausführung der Komponente außerhalb der IDE (als Standardanwendung) beschränkt.

Jetzt wird die TClockLabel-Komponente implementiert. Klicken Sie im Projektverwaltung mit der rechten Maustaste auf das Package TClockLabel.bpl und wählen Sie im Kontextmenü Erzeugen aus. Wählen Sie dann Installieren aus, um das entwickelte Komponenten-Package zu installieren und die Komponente zu registrieren:

ClockLabeIContextMenu.png

Jetzt können Sie das neue Verhalten der TClockLabel-Komponente im Formular-Designer sehen.

Zurück

Weiter