![]() |
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 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