MyButton := TButton.Create(Form1); // Form1 ist der Owner
muß nicht so sein
Owner = der Besitzer der internen Komponente
Parent = die Komponente, in welcher der sichtbare Button angezeigt wird
Wird der Owner fregegeben/gelöscht, dann löscht der automatisch auch alle seine Konder, von welchen er der Owner ist.
Der Owner ist also nur für der Freigeben der Komponente verantwortlich,
wärend der Parent für die Anzeige zuständig ist.
Und wenn der Programmierer sich um das Freigeben kümmert, dann wäre noch nichtmal ein Owner nötig.
das Panel kümmert sich ums Aufräumen des Buttons:
Delphi-Quellcode:
MyPanel := TPanel.Create(Form1);
MyPanel.Parent := Form1;
MyButton := TButton.Create(MyPanel);
myButton.Parent := MyPanel;
hat einen Vorteil, denn wenn man MyPanel.Free aufruft, dann löscht es den Button mit
die Form kümmert sich darum:
Delphi-Quellcode:
MyPanel := TPanel.Create(Form1);
MyPanel.Parent := Form1;
MyButton := TButton.Create(Form1);
myButton.Parent := MyPanel;
hier würde bei MyPanel.Free zwar der Button aus dem Fenster entfernt, aber die interne Komponente existiert weiter ... bis die Form freigegeben wird oder man MyButton.Free aufruft
PS: wird die Form (also der Owner) freigegeben und erst danach MyButton.Free aufgerufen, dann knallt es, da die Form ja den Button schon gelöscht hat und der Zeiger (MyButton) davon nix weiß ... siehe
http://www.delphipraxis.net/internal...t.php?t=177726
der Programmierer muß sich selber ums Aufräumen kümmern, da er ja keine andere Komponente damit beauftragt hat:
Delphi-Quellcode:
MyPanel := TPanel.Create(nil);
MyPanel.Parent := Form1;
MyButton := TButton.Create(nil);
myButton.Parent := MyPanel;