Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Formulare dynamisch erzeugen per Buttonklick
Flash106 - Do 31.03.05 20:19
Titel: Formulare dynamisch erzeugen per Buttonklick
Hallo,
1. Wie kann ich ein formular dynamisch erzeugen wenn ich auf einen Button klicke?
2. Ich möchte immer wieder auf den Button klicken und ein neues Formular erzeugen können, aber danach auch jedes formular einzeln ansprechen können.
3. Ich möchte, wenn ich auf einen anderen Button klicke, das sich dann alle formular schließen.
Wie realisiere ich sowas am besten???
Danke im vorraus... :)
Flash106 - Do 31.03.05 21:02
hm.. das doofe ist das ich immer ein und das selbe formular damit erzeuge... ich brauche aber unterschiedlichte. Wenn ich z.b. eine button drauf tue der ein info fenster zeigt darf das nicht bei allen forms sein. ich brauch keine instanz vom hauptformular sonder eigenständige formulare...
der_zaehe - Do 31.03.05 21:02
ich bin auch erst kürzlich dahinter gekommen, wie das geht und habe das problem auf meine art und weise gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| ... private FensterListe : TStringList;´ ...
procedure TForm1.FormCreate(Sender: TObject); begin FensterListe := TStringList.Create; end;
procedure TForm1.Button1Click(Sender: TObject); var Form2 : TForm2; begin Form2 := TForm2.Create(self); Form2.Show; FensterListe.AddObject('Bla',Form2); end;
procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin for i := 0 to FensterListe.Count-1 do TForm2(FensterListe.Objects[i]).Close; end; |
ich hab den Code jetzt net getestet aber so ähnlich hat der bei mir funktioniert.
das Application.CreateForm lass für dein dynamisch erstelltes Formular am besten ganz weg.
du kannst die einzelnen Formulare auch unterscheiden, indem du sie unter verschiedenen Namen in die TStringList einträgst. Dann kannst du mit
Delphi-Quelltext
1:
| TForm2(FensterListe.Objects[FensterListe.IndexOf(<Name des Fensters, von dir vergeben>)]) |
auf das gewünschte Fenster zugreifen.
ich hoff ich hab dich jetz net missverstanden und du meinst das dynamische Erzeugen unterschiedlicher Formulare.
AXMD - Do 31.03.05 21:11
der_zaehe hat folgendes geschrieben: |
ich bin auch erst kürzlich dahinter gekommen, wie das geht und habe das problem auf meine art und weise gelöst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| ... private FensterListe : TStringList;´ ...
procedure TForm1.FormCreate(Sender: TObject); begin FensterListe := TStringList.Create; end;
procedure TForm1.Button1Click(Sender: TObject); var Form2 : TForm2; begin Form2 := TForm2.Create(self); Form2.Show; FensterListe.AddObject('Bla',Form2); end;
procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin for i := 0 to FensterListe.Count-1 do TForm2(FensterListe.Objects[i]).Close; end; |
ich hab den Code jetzt net getestet aber so ähnlich hat der bei mir funktioniert.
das Application.CreateForm lass für dein dynamisch erstelltes Formular am besten ganz weg.
du kannst die einzelnen Formulare auch unterscheiden, indem du sie unter verschiedenen Namen in die TStringList einträgst. Dann kannst du mit
Delphi-Quelltext 1:
| TForm2(FensterListe.Objects[FensterListe.IndexOf(<Name des Fensters, von dir vergeben>)]) |
auf das gewünschte Fenster zugreifen.
ich hoff ich hab dich jetz net missverstanden und du meinst das dynamische Erzeugen unterschiedlicher Formulare. |
Wär's nicht einfacher, nur eine TList zu nehmen? TStringList ist für den Anwendungsfall nicht unbedingt notwendig.
AXMD
der_zaehe - Do 31.03.05 21:18
mist
stimmt :)
an den object-typ hab ich grad gar net gedacht. ich programmier noch net soo lange (3/4 jahr?) und hab dem entsprechend delphi-erfahrung :D
also: TList statt TStringList
cutelaw - Fr 01.04.05 08:43
joa, nimmm auf alle fälle TList. und beim button 2 sollteste die formulare auch wieder freigeben, die verbraten sonst weiterhin speicher. oder in einer liste merken und bei button1 drauf prüfen, und ggf. die bereits vorhandenen unbenutzten forms wieder verwenden.
der_zaehe - Fr 01.04.05 22:30
ach, deshalb musste ich mich immer wundern, warum meine programme in laufzeit immer mehr arbeitsspeicher verbraucht haben
Muetze1 - Sa 02.04.05 22:58
Moin!
Und warum nicht gleich eine TObjectList?? Und wenn du OwnsObjects auf True lässt, dann wird das Formular beim Delete() sogar automatisch freigegeben...
MfG
Muetze1
der_zaehe - So 03.04.05 12:51
irre! das brauch ich!
zur erklärung: ich bin anfaenger und noch nicht über alle kompos und objekt-typen informiert.
Muetze1 - So 03.04.05 14:26
Moin!
der_zaehe hat folgendes geschrieben: |
zur erklärung: ich bin anfaenger und noch nicht über alle kompos und objekt-typen informiert. |
Ging auch eher in Richtung AXMD, der das ganze vorgeschlagen hatte. Es war nicht in Bezug auf dich gemeint.
MfG
Muetze1
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!