Die untergeordneten Klassen initialisieren

Aus RAD Studio
Wechseln zu: Navigation, Suche

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.

  1. 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
}
  1. 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
        .
        .
        .
    };
    
  2. 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
    }
    

Siehe auch