Du erstellst im Create deines MenuButtons die Attribute der SubClasses zusätzlich im constructor und gibst diese im destructor noch einmal frei. Deine SubClasses sind für die Erstellung und das Freigeben Ihrer Daten verantwortlich, nicht deine Klasse TMenuButton.
Delphi-Quellcode:
constructor TMenuButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
[...]
FGlyph := TGlyph.Create;
FGlyph.FPicture := TPicture.Create;
[...]
constructor TGlyph.Create;
begin
inherited Create;
FPicture := TPicture.Create;
end;
Delphi-Quellcode:
destructor TMenuButton.Destroy;
begin
FGlyph.FPicture.Free;
FGlyph.Free;
[...]
destructor TGlyph.Destroy;
begin
FPicture.Free;
inherited Destroy;
end;
Deine "Setter"-Proceduren überschreiben die Attribute der SubClasses (Bevel, Glyph, Caption). Du solltest diese besser zuweisen (zb. über Einzelattribute oder eine geeignte Assign-Methode)