![]() |
Komponenten-Container
hallo zusammen
ich komme mal wieder auf das leidige Thema Komponenten zur Laufzeit zurück. kann ich Komponenen die ich zur Laufzeit erstellt habe irgendwie in einen Art "Container" einschließen, quasi einen Parent, so dass wenn man den "Conainter" frei gibt auch alle darin enthaltenen Komponenten frei gegeben werden? |
Re: Komponenten-Container
Hallo,
Natürlich. Du kannst als Owner der Komponente z.B. eine Panele angeben.
Delphi-Quellcode:
Wenn du die Panele jetzt freigibst, ist edEinEdit auch im Nirvana verschwunden.
edEinEdit := TEdit.Create(EinePanele);
edEinEdit.Parent := EinePanele; grüße, daniel |
Re: Komponenten-Container
hmm.. ich hab mich warscheinlich undeutlich ausgedrückt.
Beispielsweise habe ich ein Edit das hat den Parent des Forms ein Edit das hat das Parent eines Panels. jetzt will ich die beide löschen und zwar nicht in dem ich sie beide einzeln freigebe sondern in dem ich den "Container" lösche in den die beiden Edits liegen. Die Edits haben also nicht den gleichen Parent! Geht sowas? |
Re: Komponenten-Container
Hi Christoph,
mal sehn ob ich dich richtig verstanden habe. Du hast ein Edit, das auf einem Form liegt, und ein anderes Edit, welches auf einem Panel liegt. Nun willst du dass beide freigegeben werden, sobald deren Container (also bei einem das Form, beim anderen das Panel) freigegeben werden? Der Parent hat damit nichts zu tun, vielmehr ist der Owner hier von Bedeutung (also die Komponente, die du beim Create angibst). Du kannst also durchaus folgendes schreiben:
Delphi-Quellcode:
Nun wird einEdit freigegeben, sobald Form1 zerstört wird, nicht sobald Panel1 zerstört wird. Wird Panel1 zerstört, so wird das Edit einfach nicht mehr angezeigt.
einEdit := TEdit.Create(Form1);
einEdit.Parent := Panel1; Ich hoffe dich richtig verstanden zu haben :-? Greetz alcaeus |
Re: Komponenten-Container
korrekt ich war der voll idiot :wall: :wall: :wall:
Delphi-Quellcode:
hab vergessen main zu erstellen! siehe code
var e1,e2 : TEdit;
main : TComponent; procedure TForm1.Button1Click(Sender: TObject); begin main := TComponent.Create(form1); e1 := TEdit.Create(main); e1.Parent := form1; e2 := TEdit.Create(owner); e2.Parent := panel1; end; procedure TForm1.Button2Click(Sender: TObject); begin main.Free; end; Nochmal THX@all |
Re: Komponenten-Container
Was auch möglich ist: Die Komponenten in einer
![]() |
Re: Komponenten-Container
ich schaus mir an danke
|
Re: Komponenten-Container
Moin Zusammen,
oder mal kurz zusammengefasst: Der Owner entscheidet über die Lebensdauer des Controls. Wird der Owner zerstört, werden auch alle Controls zerstört, die mit diesem Verbunden sind. Sonderfall: Man gibt als Owner nil an. In diesem Falle muss man sich selber um das Freigeben des Controls kümmern. Der Parent entscheidet über die Position und Sichtbarkeit des Controls, da ein Control immer relativ zu Parent angezeigt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz