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/)
-   -   Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen? (https://www.delphipraxis.net/195011-wie-auf-komponenten-und-ereignisse-im-eigebettenten-formular-zugreifen.html)

needatip 26. Jan 2018 09:41

Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Hallo, ich lade ein Formular(Form1) in ein Panel(ContainerPanel) das auf meinem Hauptformular(MainForm) liegt:

Delphi-Quellcode:
var MainForm: TMainForm;
...
procedure TMainForm.FormCreate(Sender: TObject);
var
  NewFormClass: TFormClass;
  NewForm: TForm;
begin
  NewFormClass := TForm1;
  if ContainerPanel.ControlCount > 0 then
    ContainerPanel.Controls[0].Free;
  if Assigned(NewFormClass) then
  begin
    NewForm := NewFormClass.Create(Self);
    NewForm.Hide;
    NewForm.BorderStyle := bsNone;
    NewForm.Parent := ContainerPanel;
    NewForm.Align := alClient;
    NewForm.Show;
  end;
end;
Im Formular(Form1) habe ich einen Button der nun ein weiteres Formular(Form2) öffnet.
Form2 erstelle ich ganz normal in der IDE, ist also unabhängig von Form1 und MainForm.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;
angezeigt wird.

Wie kann ich nun z.B. von Form2 die Komponenten(Eigenschaften) und Ereignisse von Form1 ansprechen?
Wenn ich z.B. ein Label(Label1) auf Form1 habe.

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.Label1.Caption:= 'Test !';
end;
Leider reagiert Form1 nicht auf meinen Button.
Hab schon verschiedenes mit Parent Anweisungen wie

Delphi-Quellcode:
Form2.Parent:= Form1;
usw. versucht leider ohne Erfolg. :cry:

pesi 26. Jan 2018 09:54

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Vielleicht ne blöde Frage, aber hast Du mal getestet (z.B. mit nem Showmessage) ob Dein Button1Click überhaupt aufgerufen wird??? :shock:

...oder mal ein Application.ProcessMessages nach Deiner Caption-Zuweisung ausprobiert?

needatip 26. Jan 2018 10:12

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Also Button1.Click von Form2 funktioniert.
Muss also an was anderem liegen.

needatip 26. Jan 2018 10:16

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Komponenten auf Form2 reagieren auch (ShowMessage funktioniert auch)
Komisch!

Olli73 26. Jan 2018 10:29

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Du weist die neu erstellte Instanz von TForm1 nicht der Variablen Form1 zu, sondern NewForm (NewForm := NewFormClass.Create(Self);).

Somit ist dein Form1 != der erstellten Instanz. Hast du Form1 noch im "automatischen create", dann greifst du mit Form2 auf eine andere (unsichtbare) Instanz zu.

needatip 26. Jan 2018 11:03

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Delphi-Quellcode:
NewForm:= NewFormClass.Create(Form1);
funktioniert aber auch nicht!

Olli73 26. Jan 2018 11:18

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Zitat:

Zitat von needatip (Beitrag 1392083)
Delphi-Quellcode:
NewForm:= NewFormClass.Create(Form1);
funktioniert aber auch nicht!

Also wenn schon, dann:

Delphi-Quellcode:
Form1 := NewFormClass.Create(self);
Nicht schön, aber funktioniert.

needatip 26. Jan 2018 13:19

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
var
  NewFormClass: TFormClass;
  NewForm: TForm;
begin
  NewFormClass := TForm1;
  if ContainerPanel.ControlCount > 0 then
    ContainerPanel.Controls[0].Free;
  if Assigned(NewFormClass) then
  begin
    NewForm := NewFormClass.Create(self);
    NewForm.Hide;
    NewForm.BorderStyle := bsNone;
    NewForm.Parent := ContainerPanel;
    NewForm.Align := alClient;
    NewForm.Show;
  end;
end;
Geht ja nicht weil Compiler meckert!
[dcc32 Fehler] Unit1.pas(39): E2010 Inkompatible Typen: 'TForm1' und 'TForm'

Ich glaub ich steh grad am Schlauch:(

needatip 26. Jan 2018 13:20

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Sorry wollte schreiben:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
var
  NewFormClass: TFormClass;
  NewForm: TForm;
begin
  NewFormClass := TForm1;
  if ContainerPanel.ControlCount > 0 then
    ContainerPanel.Controls[0].Free;
  if Assigned(NewFormClass) then
  begin
    Form1 := NewFormClass.Create(self);
    NewForm.Hide;
    NewForm.BorderStyle := bsNone;
    NewForm.Parent := ContainerPanel;
    NewForm.Align := alClient;
    NewForm.Show;
  end;
end;

Fritzew 26. Jan 2018 13:27

AW: Wie auf Komponenten und Ereignisse im eigebettenten Formular zugreifen?
 
Zitat:

Zitat von needatip (Beitrag 1392129)
Sorry wollte schreiben:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
var
  NewFormClass: TFormClass;
  NewForm: TForm;
begin
  NewFormClass := TForm1;
  if ContainerPanel.ControlCount > 0 then
    ContainerPanel.Controls[0].Free;
  if Assigned(NewFormClass) then
  begin
    Form1 := NewFormClass.Create(self);
    NewForm.Hide;
    NewForm.BorderStyle := bsNone;
    NewForm.Parent := ContainerPanel;
    NewForm.Align := alClient;
    NewForm.Show;
  end;
end;


Warum nicht einfach?

Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
 
  if ContainerPanel.ControlCount > 0 then
    ContainerPanel.Controls[0].Free;
 
 
    Form1 := TForm1.Create(self);
    Form1.Hide;
    Form1.BorderStyle := bsNone;
    Form1.Parent := ContainerPanel;
    Form1.Align := alClient;
    Form1.Show;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 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