Die untergeordneten Klassen initialisieren
Nach oben zu Stift und Pinsel als published deklarieren
Wenn Sie Ihrer Komponente Klassen hinzufügen, muss sie der Konstruktor initialisieren, damit der Benutzer zur Laufzeit mit den Objekten interagieren kann. Der Destruktor der Komponente muss dagegen die untergeordneten Objekte freigeben, bevor er die Komponente selbst freigibt.
Da Sie der Beispielkomponente einen Stift und einen Pinsel hinzugefügt haben, müssen diese Objekte im Konstruktor initialisiert und im Destruktor freigegeben werden.
- Erzeugen Sie im Konstruktor Stift und Pinsel:
constructor TSampleShape.Create(AOwner: TComponent); begin inherited Create(AOwner); { Immer den geerbten Konstruktor aufrufen } Width := 65; Height := 65; FPen := TPen.Create; { Stift erzeugen } FBrush := TBrush.Create; { Pinsel erzeugen } end;
__fastcall TSampleShape::TSampleShape(TComponent* Owner) : TGraphicControl(Owner) { Width = 65; Height = 65; FBrush = new TBrush(); // Pinsel erzeugen FPen = new TPen(); // Stift erzeugen }
-
Fügen Sie der Deklaration der Komponentenklasse den überschriebenen Destruktor hinzu:
type TSampleShape = class(TGraphicControl) public { Destruktoren sind immer public} constructor Create(AOwner: TComponent); override; destructor Destroy; override; { override nicht vergessen } end;
class PACKAGE TSampleShape : public TGraphicControl { . . . public: // Destruktoren sind immer als public deklariert virtual __fastcall TSampleShape(TComponent* Owner); __fastcall ~TSampleShape(); // Der Destruktor . . . };
Schreiben Sie im implementation-Abschnitt der Unit den neuen Destruktor:
destructor TSampleShape.Destroy; begin FPen.Free; { Stift freigeben } FBrush.Free; { Pinsel freigeben } inherited Destroy; { Immer auch den geerbten Destruktor aufrufen } end;
__fastcall TSampleShape::~TSampleShape() { delete FPen; // Stiftobjekt löschen delete FBrush; // Pinselobjekt löschen }