Initialisation des classes ayant un propriétaire
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 :
- 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
}
- 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
.
.
.
};
- 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
}