Autor Beitrag
rob87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Mi 29.11.06 10:30 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 1

WIN XP, WIN 7
Delphi 5 Ent, Delphi 2007 Pro, XE4
BeitragVerfasst: Mi 29.11.06 11:51 
Wenn du von einem Hauptformular Form1 öffnest kann du es mal so probieren
ausblenden volle Höhe 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:
// zentrale Procedure auf Hauptfomular als Schleife solange bis einer endgültig über btn_Ende geht
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 134

win xp prof
D3, D4, D7
BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
2:
form2.visible:=true;
form1.close;


gruß,
zj
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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...