Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Formular in Panel einbetten (https://www.delphipraxis.net/27476-formular-panel-einbetten.html)

aschne1 10. Aug 2004 22:36


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:
procedure TForm1.Button1Click(Sender: TObject);
// Form2 - Variable der Formularunit des anzuzeigenden Formulars (Form2 : TForm2)
begin
  Form2 := TForm2.Create(Self);
  Form2.parent := Panel5;
end;
So ist dann das Formular im Panel
Delphi-Quellcode:
  Windows.SetParent(Form2.Handle, Panel5.Handle);
Eigentlich müsste es aber auch mit der ersten Parent Anweisung gehen?
Der Beitrag Form an einen Panel im Hauptfenster koppeln hilft mir auch nicht weiter!

Was mache ich falsch? :gruebel:

Danke und Gruss
Armin

Erichgue 25. Aug 2004 07:12

Re: Formular in Panel einbetten
 
Hallo,

versuchs mal mit

Form2 := TForm2.Create(Panel5);

Gruß

aschne1 25. Aug 2004 21:04

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

Fossibaer58809 25. Aug 2004 21:20

Re: Formular in Panel einbetten
 
Habe das gerade mal ausprobiert.. und klappt.

Delphi-Quellcode:
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;
Gruß
Michael

Sorry, hatte die markierte Zeile vergessen.

aschne1 31. Aug 2004 20:20

Re: Formular in Panel einbetten
 
Hallo Michael

Danke für Deine Lösung! Klappt prima :-D

Gruss
Armin

Christian Seehase 31. Aug 2004 20:25

Re: Formular in Panel einbetten
 
Moin Zusammen,

vielleicht noch eine kleine Info, warum das

Delphi-Quellcode:
Form2 := TForm2.Create(Panel1);
nicht reicht, sondern

Delphi-Quellcode:
Form2.Parent := Panel1;
noch erforderlich ist, damit es klappt.

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.

aschne1 31. Aug 2004 21:25

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:

Der Parameter beim Create gibt den Owner an.
In diesem Fall ist der Owner Panel1, oder?

Zitat:

Dadurch wird das Erzeugte Objekt automatisch zerstört, wenn der Owner zerstört wird.
Das erzeugte Objekt Form2 wird also automatisch zerstört, aber wann passiert das mit dem Owner Panel1? Dies müsste ja vorher geschehen ? Und durch welches Kommando?

Bitte kläre mich kurz auf. Danke im Voraus für Deine Bemühungen.

Tschau

Armin

Fossibaer58809 31. Aug 2004 21:38

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

aschne1 1. Sep 2004 23:24

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

alcaeus 1. Sep 2004 23:26

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 12:09 Uhr.
Seite 1 von 2  1 2      

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