Etape 3 - Utilisation de TTimer pour actualiser TClockLabel à chaque seconde

De RAD Studio
Aller à : navigation, rechercher

Remonter à Création d'un composant FireMonkey stylé par extension d'un composant existant


Pour actualiser TClockLabel à chaque seconde, ce tutoriel utilise le composant TTimer en interne. Pour utiliser le composant TTimer dans le composant TClockLabel, vous devez :

  • Créer une instance de TTimer dans le constructeur de TClockLabel.
  • Configurer le composant TTimer afin de déclencher l'événement OnTimer à chaque seconde.
  • Mettre à jour la propriété Text quand l'événement OnTimer est déclenché.
  • Détruire l'instance de TTimer dans le destructeur de TClockLabel.

Pour effectuer ces actions, définissez les membres supplémentaires suivants (les membres créés antérieurement ne sont pas listés ici) :

Dans Delphi :

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

Dans C++ :

class PACKAGE TClockLabel : public TLabel {
private:

	TTimer* FTimer;

	void __fastcall OnTimer(TObject* Sender);

public:
	__fastcall ~TClockLabel(void);
};

Comme dans les étapes précédentes, l'appui sur CTRL+MAJ+C crée des espaces réservés pour ces méthodes. Implémentez ces méthodes comme suit :

Dans 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;

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

Comme vous le remarquez, l'instance créée de TTimer dépend de la propriété ComponentState. C'est parce que vous n'avez pas à actualiser le Label à la conception (pendant qu'il s'exécute dans l'EDI). Cela restreint la création du composant TTimer seulement à l'exécution du composant hors de l'EDI (en tant qu'application standard).

Le composant TClockLabel est à présent implémenté. Dans le Gestionnaire de projets, cliquez avec le bouton droit sur le package TClockLabel.bpl et sélectionnez Construire dans le menu contextuel. Sélectionnez ensuite Installer pour installer le package de composant développé et recenser le composant :

ClockLabeIContextMenu.png

Vous pouvez à présent voir le nouveau comportement du composant TClockLabel dans le Concepteur de fiches.

Précédent

Suivant