Déclaration des propriétés d'accès

De RAD Studio
Aller à : navigation, rechercher

Remonter à Publication du crayon et du pinceau


Vous pouvez fournir les accès aux objets appartenant à un composant en déclarant des propriétés de même type que ces objets. Cela offre aux développeurs un moyen d'accéder aux objets lors de la conception ou de l'exécution. Généralement, la partie read de la propriété ne fait que référencer le champ de classe, alors que la partie write appelle une méthode qui permet au composant de réagir aux changements apportés à l'objet.

Ajoutez des propriétés à votre contrôle forme pour fournir les accès aux champs du crayon et du pinceau. Vous allez également déclarer les méthodes pour réagir aux changements de crayon ou de pinceau.

 type
   TSampleShape = class(TGraphicControl)
   .
   .
   .
   private                                              { these methods should be private }
     procedure SetBrush(Value: TBrush);
     procedure SetPen(Value: TPen);
   published                                        { make these available at design time }
     property Brush: TBrush read FBrush write SetBrush;
     property Pen: TPen read FPen write SetPen;
   end;
 class PACKAGE TSampleShape : public TGraphicControl
 {
   .
   .
   .
 private:
     TPen *FPen;
     TBrush *FBrush;
     void __fastcall SetBrush(TBrush *Value);
     void __fastcall SetPen(TPen *Value);
     .
     .
     .
 __published:
     __property TBrush* Brush = {read=FBrush, write=SetBrush, nodefault};
     __property TPen* Pen = {read=FPen, write=SetPen, nodefault};
 };

Vous devez ensuite écrire les méthodes SetBrush et SetPen dans la partie implémentation de l'unité :

 procedure TSampleShape.SetBrush(Value: TBrush);
 begin
   FBrush.Assign(Value);                          { replace existing brush with parameter }
 end;
 procedure TSampleShape.SetPen(Value: TPen);
 begin
   FPen.Assign(Value);                              { replace existing pen with parameter }
 end;
 void __fastcall TSampleShape::SetBrush( TBrush* Value)
 {
   FBrush->Assign(Value);
 }
 void __fastcall TSampleShape::SetPen( TPen* Value)
 {
   FPen->Assign(Value);
 }

Affecter directement le contenu de Value à FBrush-

   FBrush := Value;
   FBrush = Value;

- écraserait le pointeur interne de FBrush, ferait perdre de la mémoire et créerait une série de problèmes de propriété.

Voir aussi