Und so hast du dir eine wunderschöne Endlosschleife gebastelt.
MyPanel hat Panel1 als Owner
und Panel1 hat das MyPanel als Owner.
Als Ergebnis halten sich beide gegenseitig im Speicher und am Ende hat man ein Speicherleck,
genauso, als wenn MyPanel garkeinen Owner hätte und es Panel1 nicht gäbe.
Außerdem wird/kann CreateWnd mehrmals zur Laufzeit aufgerufen werden, womit es mehrere Panel1 geben könnte.
Die Variable Panel1 wird sonst nirgendwo anders verwendet und kann auch gut und gern einfach nur eine Lokale in CreateWnd sein.
Wozu das Create hier im Beispiel sein soll, weiß wohl keiner.
Delphi-Quellcode:
unit PanelUnit;
interface
uses ExtCtrls, Classes;
type
TMyPanel =
class(TPanel)
private
{ private-Deklarationen }
protected
{ protected-Deklarationen }
//procedure CreateWnd(); override;
public
{ public-Deklarationen }
constructor Create(AOwner: TComponent);
override;
published
{ published-Deklarationen }
end;
procedure Register();
implementation
procedure Register();
begin
RegisterComponents('
oki', [TMyPanel]);
end;
{ TMyPanel }
//procedure TMyPanel.CreateWnd;
constructor TMyPanel.Create(AOwner: TComponent);
var
Panel1: TPanel;
begin
inherited;
Panel1 := TPanel.Create(self);
Panel1.Parent := self;
if Assigned(Owner)
then
Owner.InsertComponent(Panel1);
end;
end.
Hab den Thread jetzt nicht mehr so ganz im Kopf, aber wozu soll das Panel1 jetzt eigentlich dienen?
Delphi-Quellcode:
unit PanelUnit;
interface
uses ExtCtrls, Classes;
type
TMyPanel =
class(TPanel)
private
{ private-Deklarationen }
protected
{ protected-Deklarationen }
//procedure CreateWnd(); override;
public
{ public-Deklarationen }
constructor Create(AOwner: TComponent);
override;
published
{ published-Deklarationen }
end;
procedure Register();
implementation
procedure Register();
begin
RegisterComponents('
oki', [TMyPanel]);
end;
{ TMyPanel }
//procedure TMyPanel.CreateWnd;
constructor TMyPanel.Create(AOwner: TComponent);
begin
inherited;
if Assigned(Owner)
then
Owner.RemoveComponent(Panel1);
end;
end.