Schritt 3 - Verwenden von TTimer zum sekündlichen Aktualisieren von TClockLabel
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:
Jetzt können Sie das neue Verhalten der TClockLabel-Komponente im Formular-Designer sehen.