Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponenten-Container (https://www.delphipraxis.net/31236-komponenten-container.html)

LoL 6. Okt 2004 13:30


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?

Sanchez 6. Okt 2004 13:35

Re: Komponenten-Container
 
Hallo,

Natürlich. Du kannst als Owner der Komponente z.B. eine Panele angeben.

Delphi-Quellcode:
  edEinEdit := TEdit.Create(EinePanele);
  edEinEdit.Parent := EinePanele;
Wenn du die Panele jetzt freigibst, ist edEinEdit auch im Nirvana verschwunden.

grüße, daniel

LoL 6. Okt 2004 13:41

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?

alcaeus 6. Okt 2004 13:51

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:
einEdit := TEdit.Create(Form1);
einEdit.Parent := Panel1;
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.
Ich hoffe dich richtig verstanden zu haben :-?

Greetz
alcaeus

LoL 6. Okt 2004 13:58

Re: Komponenten-Container
 
korrekt ich war der voll idiot :wall: :wall: :wall:

Delphi-Quellcode:
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;
hab vergessen main zu erstellen! siehe code
Nochmal THX@all

Chewie 6. Okt 2004 14:02

Re: Komponenten-Container
 
Was auch möglich ist: Die Komponenten in einer Delphi-Referenz durchsuchenTComponentList zusammenfassen und dann bei Bedarf einfach die Liste freigeben.

LoL 6. Okt 2004 14:03

Re: Komponenten-Container
 
ich schaus mir an danke

Christian Seehase 6. Okt 2004 15:38

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 06:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz