Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Neues Formular schleißt altes Formular nicht
rob87 - Mi 29.11.06 10:30
Titel: Neues Formular schleißt altes Formular nicht
Hallo
ich habe in Delphi mehrere Formulare in einem Projekt erstellt.
Und nun will ich, dass während der Laufzeit zwischen diesen Formularen gesprungen werden kann.
Sprich: Ein "Link" führt von TForm1 über einen Button zu TForm2. In dem OnClick des Buttons steht folgendes drin: Form1.close und TForm2.ShowModal;
Aber leider habe ich nach Drücken des Buttons beide Formulare geöffnet. Und wenn ich nun von TForm2 wieder zu TForm1 zurückspringen will, kommt folgende Meldung: "Aus einem sichtbaren Fenster kann kein modales gemacht werden."
Zur Orientierung: Das Ganze soll wie eine standartmäßige Programm-Installation unter Windows funktionieren.
Bei Fragen einfach melden.
Mfg, rob87
Andreas Schilling - Mi 29.11.06 11:51
Wenn du von einem Hauptformular Form1 öffnest kann du es mal so probieren
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm0.Formular_Oeffnen; begin while nWelches_Formular > 0 do begin if nWelches_Formular = 1 then begin try Form1 := TForm1.create(Application); Form1.showmodal; finally Form1.free; Form1 := nil; end; end; if nWelches_Formular = 2 then begin try Form2 := TForm2.create(Application); Form2.ShowModal; finally Form2.free; Form2 := nil; end; end; end; end;
procedure TForm0.btn_Form1click(sender : Tobject); begin nWelches_Formular := 1; Formular_Oeffnen; end;
procedure TForm1.btn_zu_Form2click(sender : TObject); begin nWelches_Formular := 2; close; end;
procedure TForm1.btn_Endeclick(sender : TObject); begin nWelches_Formular := 0; close; end; |
zongo-joe - Mi 29.11.06 11:55
showmodal heisst, dass erst das geöffnete Fenster geschlossen werden muss, damit die näxte Anweisung ausgeführt wird.
Dein Problem ist:
- wenn Du erst form1.close und dann form2.showmodal machst, dann wird erst die form1 geschlossen und du kannst nicht mehr "zurückspringen"; bin mir auch nicht sicher, ob dann die nächste Anweisung überhaupt noch ausgeführt wird...
- wenn Du erst form2.showmodal machst und dann form1.close, dann muss erst form2 wieder geschlossen werden, damit du form1 schliessen kannst...
Eine Lösung wäre zB wenn Du schreibst
Delphi-Quelltext
1: 2:
| form2.visible:=true; form1.close; |
gruß,
zj
rob87 - Mi 29.11.06 14:52
an zongo-joe:
Wenn ich also komplett alles mit visibile:=true bzw. visible:=false löse, müsste es ja funktionieren oder??
Danke zongo-joe
-----------------
an andreas:
tut mir leid, aber die lösung von zongo-joe is einfacher. vor allem weil quelltext verstehen sowieso schwerer is. liegt nicht an deinem quelltext!
deswegen probier ich nun erstmal die visible-variante. trotzdem danke!
gruß rob87
rob87 - Mi 29.11.06 14:56
Mit Visible bekomm ich mein gewünschtes Ergebnis.
Jetzt muss ich nur noch die Zentrierung der Formulare deckungsgleich ausrichten ;-)
Vielen Dank!!!
jaenicke - Mi 29.11.06 15:22
Nur so nebenbei:
Viel einfacher ist es, einfach die Seiten in ein TPageControl zu setzen und dann nur zwischen dessen Seiten umzuschalten. (Natürlich normalerweise mit ausgeblendeten Tabs, sodass man das als User gar nicht merkt.)
Aber ist ja letztendlich egal wie du es machst, Hauptsache es funktioniert.
Einfacher änderbar ist aber vermutlich die PageControl Variante. Vor allem: Die Steuerungsknöpfe und die Überschrift sollen ja vermutlich immer gleich aussehen.
Nun ja und mit einem PageControl kannst du auch wirklich immer dieselben benutzen ohne die auf verschiedene Formulare kopieren zu müssen. Dazwischen (zwischen Überschrift oben und Steuerungsknöpfen unten) ist dann das PageControl, das die einzelnen Seiten enthält.
Das nur als Tipp, so habe ich sowas auch schon gelöst. Vor allem deshalb, weil es einfach schneller und mit weniger Resourcen lief...
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!