Initialisation des classes ayant un propriétaire

De RAD Studio
Aller à : navigation, rechercher

Remonter à Publication du crayon et du pinceau

Si vous ajoutez des classes dans votre composant, le constructeur de ce dernier doit les initialiser pour que l'utilisateur puisse interagir avec ces objets lors de l'exécution. De même, le destructeur du composant doit également détruire les objets appartenant au composant avant de détruire ce dernier.

Comme vous avez déclaré un crayon et un pinceau dans le contrôle forme, vous devez les initialiser dans le constructeur du contrôle forme et les détruire dans son destructeur :

  1. Construisez le crayon et le pinceau dans le constructeur du contrôle forme :
 constructor TSampleShape.Create(AOwner: TComponent);
 begin
   inherited Create(AOwner);  { appeler toujours le constructeur hérité }
   Width := 65;
   Height := 65;
   FPen := TPen.Create;                                               { construire le crayon }
   FBrush := TBrush.Create;                                         { construire le pinceau }
 end;
 __fastcall TSampleShape::TSampleShape(TComponent* Owner) : TGraphicControl(Owner)
 {
   Width = 65;
   Height = 65;
   FBrush = new TBrush();                               // construit le crayon
   FPen = new TPen();                                   // construit le pinceau
 }
  1. Ajoutez le destructeur redéfini dans la déclaration de la classe composant :
 type
   TSampleShape = class(TGraphicControl)
   public                                                  { les destructeurs sont toujours publics}
     constructor Create(AOwner: TComponent); override;
     destructor Destroy; override;                          { ne pas oublier la directive override }
   end;
 class PACKAGE TSampleShape : public TGraphicControl
 {
   .
   .
   .
 public:                                                // les destructeurs sont toujours publics
     virtual __fastcall TSampleShape(TComponent* Owner);
     __fastcall ~TSampleShape();                        // le destructeur
     .
     .
     .
 };
  1. Ecrivez le nouveau destructeur dans la partie implementation de l'unité :
 destructor TSampleShape.Destroy;
 begin
   FPen.Free;                                                    { détruire l'objet crayon }
   FBrush.Free;                                                { détruire l'objet pinceau }
   inherited Destroy;                         { appeler toujours le destructeur hérité }
 end;
 __fastcall TSampleShape::~TSampleShape()
 {
   delete FPen;                                         // détruit l'objet crayon
   delete FBrush;                                       // détruit l'objet pinceau
 }