Etape 2 - Implémenter une propriété pour spécifier le format

De RAD Studio
Aller à : navigation, rechercher

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


Le composant TClockLabel créé à l'étape 1 doit définir le format date/heure quand il présente l'heure en cours sous la forme d'une propriété afin que les utilisateurs du composant puissent la modifier.

Implémentation d'une propriété pour spécifier le format

Pour implémenter la propriété Format, ajoutez la ligne suivante à la section published du TClockLabelclass :

Dans Delphi :

 property Format: String;

Dans C++ :

__property String Format;

Ajoutez aussi une définition du constructeur à la section public, comme suit :

Dans Delphi :

 constructor Create(AOwner: TComponent); override;

Dans C++ :

__fastcall TClockLabel(TComponent* Owner);

Dès que le composant Format est changé, Label doit être mis à jour. Pour prendre en charge la mise à jour du libellé, introduisez la méthode UpdateLabel en tant que méthode private.

Le code doit ressembler à ceci :

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

Dans C++ :

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

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

__published:
	__property String Format;
};

Après l'insertion de cette ligne, appuyez sur CTRL+MAJ+C. L'EDI ajoute automatiquement un accesseur en écriture pour la propriété Format et un squelette pour le constructeur. Le code doit maintenant ressembler à ceci :

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

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

Conformément à la documentation de System.SysUtils.DateTimeToString, la valeur typique du format date/heure est 'c'. Initialisez le champ FFormat avec 'c'.

Dans Delphi :

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

Dans C++ :

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

Implémentez maintenant les méthodes UpdateLabel et SetFormat comme suit :

Dans Delphi :

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

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

Dans C++ :

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

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

Héritage des styles du composant parent

Si vous voulez que votre composant hérite des styles du composant parent, utilisez le code suivant :

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
}

Précédent

Suivant

Voir aussi