Delphi-PRAXiS
Seite 2 von 3     12 3      

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

delphicoder123 11. Jun 2019 22:23

AW: VCL Formular in ein Panel einbetten
 
Zitat:

Zitat von hoika (Beitrag 1434371)
Hallo,

alt
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1 := TForm1.Create(Panel1);
neu
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form2 := TForm2.Create(Panel1);


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.

EWeiss 11. Jun 2019 22:30

AW: VCL Formular in ein Panel einbetten
 
Dann Debug doch mal das ganze.
Eventuell findest du den Fehler dann selbst.

gruss

uligerhardt 11. Jun 2019 22:53

AW: VCL Formular in ein Panel einbetten
 
Zitat:

Zitat von delphicoder123 (Beitrag 1434378)
Zitat:

Zitat von uligerhardt (Beitrag 1434373)
Außerdem: Wenn möglich, nimm Frames statt Forms, wenn du es einbetten willst.

Du meinst, dass ich ein VCL-Frame anstatt eines VCL Formular nehmen soll?

Genau. Das wäre meine erste Wahl, solange nichts Triftiges dagegenspricht.

Heuman 11. Jun 2019 23:04

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ß

Uwe Raabe 11. Jun 2019 23:26

AW: VCL Formular in ein Panel einbetten
 
Zitat:

Zitat von delphicoder123 (Beitrag 1434382)
Hier nochmal der aktuelle Code.
...
Code:
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;



Bei der
Delphi-Quellcode:
with
-Anweisung fehlt das
Delphi-Quellcode:
begin/end
.

hoika 12. Jun 2019 06:20

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 ... ;)

haentschman 12. Jun 2019 08:21

AW: VCL Formular in ein Panel einbetten
 
Zitat:

Genau deshalb sollte man with vermeiden.
+:thumb:

Andreas L. 12. Jun 2019 09:08

AW: VCL Formular in ein Panel einbetten
 
So würde ich den Code formulieren:

Delphi-Quellcode:
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.
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!

EWeiss 12. Jun 2019 09:17

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

hoika 12. Jun 2019 13:21

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 07:45 Uhr.
Seite 2 von 3     12 3      

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