![]() |
Formular in Panel einbetten
Hallo
In meinem MDI-Hauptformular befinden sich einige verschachtelte Panels. Nun möchte ich bei Bedarf in einem der Panel ein oder mehrere Kindfenster anzeigen. Mit folgendem Code wird das Kind-Formular angezeigt, jedoch nicht dem Panel zugeordnet, sondern dem Hauptformular.
Delphi-Quellcode:
So ist dann das Formular im Panel
procedure TForm1.Button1Click(Sender: TObject);
// Form2 - Variable der Formularunit des anzuzeigenden Formulars (Form2 : TForm2) begin Form2 := TForm2.Create(Self); Form2.parent := Panel5; end;
Delphi-Quellcode:
Eigentlich müsste es aber auch mit der ersten Parent Anweisung gehen?
Windows.SetParent(Form2.Handle, Panel5.Handle);
Der Beitrag ![]() Was mache ich falsch? :gruebel: Danke und Gruss Armin |
Re: Formular in Panel einbetten
Hallo,
versuchs mal mit Form2 := TForm2.Create(Panel5); Gruß |
Re: Formular in Panel einbetten
Hallo Erichgue
Habe ich bereits erfolglos versucht. Das erzeugte Formular wir auf dem Hauptformular erstellt und das Panel befindet sich davor im Vordergrund. Trotzdem danke :) Gruss |
Re: Formular in Panel einbetten
Habe das gerade mal ausprobiert.. und klappt.
Delphi-Quellcode:
Gruß
procedure TForm1.Button1Click(Sender: TObject);
begin Form2 := TForm2.Create(Panel1); Form2.Parent := Panel1; Form2.SetBounds(10,10,Form2.Width, Form2.Height); Form2.FormStyle := fsNormal; // Hatte diese Zeile vergessen Form2.Visible := true; end; Michael Sorry, hatte die markierte Zeile vergessen. |
Re: Formular in Panel einbetten
Hallo Michael
Danke für Deine Lösung! Klappt prima :-D Gruss Armin |
Re: Formular in Panel einbetten
Moin Zusammen,
vielleicht noch eine kleine Info, warum das
Delphi-Quellcode:
nicht reicht, sondern
Form2 := TForm2.Create(Panel1);
Delphi-Quellcode:
noch erforderlich ist, damit es klappt.
Form2.Parent := Panel1;
Der Parameter beim Create gibt den Owner an. Dadurch wird das Erzeugte Objekt automatisch zerstört, wenn der Owner zerstört wird. Der Parent gibt an, relativ zu welchem Objekt ein anderes angezeigt wird. |
Re: Formular in Panel einbetten
Hallo Chris
Besten Dank für Deine Ausführungen. Ich blicke jedoch nicht ganz durch was Du damit meinst. Zitat:
Zitat:
Bitte kläre mich kurz auf. Danke im Voraus für Deine Bemühungen. Tschau Armin |
Re: Formular in Panel einbetten
Hallo zusammen,
durch das TForm2.Create(Panel1) wird Panel1 automatisch Owner von Form2. siehe OH: TForm.Create(AOwner : TComponent) Wenn Panel1 zerstört wird, dann wird auch automatisch auch Form2 zerstört weil ja Panel1 Owner von Form2 ist. Gruß Michael |
Re: Formular in Panel einbetten
Hallo Michael
Du hast Recht mit der Funktion des Owners! Nur ich zerstöre das Panel1 nicht mit Deinem Code. Weshalb muss also explizit per Parent-Anweisung ein Owner angegeben werden? Ich tue das ja schon mit Create! Wenn ich als Parameter Self (Form1) übergebe muss ich das ja auch nicht. Ich denke es liegt daran, das intern was passiert. Aber was? Hast Du eine Erklärung? Danke und Gruss Armin |
Re: Formular in Panel einbetten
Hi Armin!
Die Owner-Eigenschaft gibt indirekt an, wann das Form zerstört wird. (wie bereits oben erklärt) Die Parent-Eigenschaft hingegen gibt an, auf welchem Control das Form sitzen soll. Du könntest also als Owner Form1 angeben, als Parent aber Panel1, und dein Form würde immer noch auf Panel1 sein. Nur wird es erst zerstört, sobald Form1 zerstört wird. Ich hoffe das bringt etwas Klarheit in die Sache. Greetz alcaeus |
Re: Formular in Panel einbetten
Hi Armin,
ich verstehe deine Frage deshalb gut, da es häufig zu der Verwechselung zwischen Owner und Parent kommt. Im Constructor wird der Owner, also der Eigentümer des Objekts, angegeben. Ein Control kann auch keinen Eigentümer haben. Dann ist der Parameter einfach NIL. Der Eigentümer eines Objekts hat ausschließlich was mit der VCL zu tun und somit keine direkte Funktion für Windows. Der Owner hilft der VCL die Verwaltung von Speicher und Objekten so komfortabel zu machen, daß man sich fast nicht darum kümmern muß. Hat z.B. ein Control ein Owner Label1, dann wird das Control gelöscht, wenn der Eigentümer - also Label1 - gelöscht wird. So nach dem Motto, wenn der Eigentümer weg ist, dann sind auch alle seine Nachfahren weg. Ander der Parent. Der Parent hat nicht viel mit der VCL und dem Verwalten von Objekten zu tun. Er regelt für die API die Verbindung von Objekten zueinander. Hat ein Objekt Parents (Eltern), dann ist dieses Objekt also ein Kind der Parents und somit wird es in das Objekt der Parents eingebettet. Wird diese Verbindung zwischen den Objekten wieder aufgelöst, werden die Objekte auch wieder optisch getrennt. Mit dem Parent kann man also die Optik steuern. Mit dem Owner nicht. Grüße Kay |
Re: Formular in Panel einbetten
Hallo
Ich bin wohl nicht der Einzige, der den Owner und Parent gleichgestellt hat? :wall: Danke Kay und Andreas. Greetz Armin |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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