Delphi-PRAXiS

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 Erzeugte Form (https://www.delphipraxis.net/37122-erzeugte-form.html)

smart 31. Dez 2004 15:04


Erzeugte Form
 
Ich habe eine Form = fsNormal (Haupt Form). Auf dieser Form ist ein Button. Wenn ich den Button klicke, wird eine mit Application.CreateForm(TForm2, Form2); eine zweite Form aufgerufen. Wenn ich nochmals auf den Button klicke eine Weitere usw. aufgerufen. Auf den aufgerufenen Formen ist ein TEdit. Das klappt auch alles ganz gut nur wir komme ich an TEdit von den aufgerufenen Formen heran? Mit Form2.Edit.Text komme ich nur an der ersten Form herann. Hat Einer von Euch einen Vorschlag?

supermuckl 31. Dez 2004 15:08

Re: Erzeugte Form
 
Zitat:

Auf den aufgerufenen Formen ist ein TEdit.
wenn du diese edits auch dynamisch instanziierst und das parent auf das entsprechende form setzt, MUSS es gehen

Wolverine 31. Dez 2004 15:11

Re: Erzeugte Form
 
Hi,

wie sieht denn dein Code aus???

smart 31. Dez 2004 15:38

Re: Erzeugte Form
 
Hier ist mein Code:

Code:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
    Application.CreateForm(TForm2, Form2);
end;

end.
Code:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
begin

end;

procedure TForm2.Edit1Change(Sender: TObject);
begin

end;

end.
Matürlich könnte ich auf der Form2 das TEdit dynamisch erzeugen, aber auf dieser Form sollen noch weiter Elemente platziert werden, so dass es zu umständlich wäre alle Elemente dyn. zu erzeugen.

DP-Maintenance 31. Dez 2004 19:23

DP-Maintenance
 
Dieses Thema wurde von "Christian Seehase" von "Windows API" nach "VCL-Komponenten und Controls" verschoben.
Kein Windows API Problem

SirThornberry 31. Dez 2004 22:07

Re: Erzeugte Form
 
du musst die instanzen von TForm2 dir irgendwo absichern bevor du die nächste erzeugst sonst ist klar das du nicht mehr über form2 ran kommst da du die variable form2 mit einer neuen Instanz von TForm2 überschreibst.

Erstelle die neuen Instanzen am besten so
Delphi-Quellcode:
  form2 := TForm2.Create(Application);
anschließend kannst du über form2.Edit1 auf das edit der zuletzt erzeugten Instanz zugreifen.
Wenn du auf alle instanzen zugreifen willst nimm einfach eine TList dafür
Delphi-Quellcode:
form2Liste: TList;
[...]
form2Liste := TList.Create;
[...]
  form2Liste.Add(TForm2.Create(Application));
damit wird jedes mal wenn eine Instanz erstellt wird diese in die Liste gepackt.
später kannst du dann mit
Delphi-Quellcode:
TForm2(form2Liste.Items[Index]).Edit1
auf die Edits der verschiedenen Instanzen zugreifen.

smart 1. Jan 2005 09:35

Re: Erzeugte Form
 
Frohes neues Jahr!

Vielen Dank für Deine Antwort!
Ich habe es getestet, aber wenn ich so abfrage
Code:
TForm2(Form2.Liste.Items[Index]).Edit1.Text := 'Test';
kann ich wieder nur auf die zuletzt erzeugte Form zurÜckgreifen. Nicht auf alle Formen. Ich bin aber noch Delphi- Anfänger und bitte um Entschuldigung wenn ich etwas nicht sofort verstehen!

Und wenn ich so Abfrage
Code:
TForm2(Form2.Liste.Items[0]).Edit1.Text := 'Test'; // für die erste Form
TForm2(Form2.Liste.Items[1]).Edit1.Text := 'Test'; // für die zeite Form
Dann bekomme ich die Fehlermeldung: Liste überschreitet das Maximum (1).

smart 1. Jan 2005 11:13

Re: Erzeugte Form
 
Ich habe es doch hinbekommen. Hatte sich ein Schreibfehler eingeschlichen! Aber wenn ich die Formen so öffne, kann ich zwar auf alle Formen zugreifen, aber wenn ich die Formen schliesse und dann wieder aufrufe stürzt Delphi ab.

SirThornberry 1. Jan 2005 11:57

Re: Erzeugte Form
 
dann einfach im onClose/onDestroy der Form aus der Liste austragen
Delphi-Quellcode:
 Form2Liste.Delete(Form2Liste.IndexOf(Self));

smart 1. Jan 2005 14:17

Re: Erzeugte Form
 
Ja, vielen Dank für die Antwort, Daruf bin ich auch schon gekommen. Ich komme jetzt Dank Deine Hilfe klar und habe wieder etwas dazu gelernt. Nochmals Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.

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