![]() |
AW: VCL Formular in ein Panel einbetten
Zitat:
Ich müsste noch mindestens einen Fehler haben. Zwar wird jetzt, dass Formular angezeigt aber das Form2 ist immer noch nicht im Panel von Form1. Gerne können auch andere antworten, wenn man die Antwort weiß. Hier nochmal der aktuelle Code.
Code:
unit parent;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, child; type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Form2 := TForm2.Create(Panel1); with Form2 do Parent := Panel1; Width := 500; Height := 500; Top := 10; Left := 10; Show; end; end.
Code:
unit child;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm2 = class(TForm) btnCalc: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; procedure btnCalcClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.btnCalcClick(Sender: TObject); begin edit3.Text:=edit1.Text+edit2.Text; end; end. |
AW: VCL Formular in ein Panel einbetten
Dann Debug doch mal das ganze.
Eventuell findest du den Fehler dann selbst. gruss |
AW: VCL Formular in ein Panel einbetten
Zitat:
|
AW: VCL Formular in ein Panel einbetten
Hallo,
falls ich es jetzt richtig verstanden. Dem Konstruktor 'self' übergeben. procedure Tform1.FormCreate(Sender: TObject); begin Form2 := TForm2.Create(self); with Form2 do begin Parent := Panel1; Width := 500; Height := 500; Top := 10; Left := 10; Show; end; end; Gruß |
AW: VCL Formular in ein Panel einbetten
Zitat:
Bei der
Delphi-Quellcode:
-Anweisung fehlt das
with
Delphi-Quellcode:
.
begin/end
|
AW: VCL Formular in ein Panel einbetten
Hallo,
eigentlich fehlt das begin end nicht, das with ist zu viel ;) Genau deshalb sollte man with vermeiden. Was wäre z.B., wenn es das Show in TForm2 nicht geben würde? Dann würde das Show von Form1 aufgerufen. Da beide vom Typ TForm sind, klappt das hier (wenn begin/end da wären), muss aber nicht. Dumm wäre es, wenn es z.B. in TForm2 eine Methode Halt geben würde ... ;) |
AW: VCL Formular in ein Panel einbetten
Zitat:
|
AW: VCL Formular in ein Panel einbetten
So würde ich den Code formulieren:
Delphi-Quellcode:
Wichtig: Form2 muss noch aus der Liste der automatisch zu erstellenden Formulare entfernt werden. Menü > Projekt > Optionen > Formulare > In der Liste links Form2 markieren und auf den ">"-Button klicken. Dann landet Form2 in der rechten Liste!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, child; type TForm1 = class(TForm) Panel1: TPanel; procedure FormCreate(Sender: TObject); private // Feld für das Form anlegen FEmbeddedForm: TForm2; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // Das Form soll Form1 als Owner haben // deshalb wird Self angegeben. // Dadurch wird das Form automatisch freigegeben // wenn das Form1 gechlossen/freigegeben wird... FEmbeddedForm := TForm2.Create(Self); // Als Parent wird Panel1 verwendet. // Parent gibt an auf welchen Control // das Form platziert werden soll. FEmbeddedForm.Parent := Self.Panel1; // Ein paar Eigenschaften des Forms festlegen. // Ich würde eher Align verwenden. // Deshalb habe ich das auskommentiert... //FEmbeddedForm.Width := 500; //FEmbeddedForm.Height := 500; //FEmbeddedForm.Top := 10; //FEmbeddedForm.Left := 10; // Mit Align := alClient ist das Form // immer genau so groß wie das Panel1... FEmbeddedForm.Align := alClient; // Zu guter letzt das Form noch sichtbar machen FEmbeddedForm.Visible := True; end; end. |
AW: VCL Formular in ein Panel einbetten
Frage mich was der Aufwand soll pack doch ne MDI Form rein und gut ist.
Warum da selbst was frickeln wenn man das unbedingt haben muss. gruss |
AW: VCL Formular in ein Panel einbetten
Hallo,
FEmbeddedForm ist nirgendwo definiert. MDI: Ich dachte, dass wäre tot? (Obwohl das hier ja nach Wunsch genau das Richtige wäre.) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:06 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