"... Da bei einem modalen Formular die Anwendung unterbrochen wird, bis der Benutzer das Fenster wieder schließt, ..." Daraus habe ich abgeleitet, dass die Form1 nicht verwendet werden kann (=> und im Hintergrund bleibt!!), bis Form2 wieder geschlossen worden ist. Und in der Zwischenzeit soll nur in Form2 gearbeitet werden.
Ich habe mal einem meiner Testprogramme ein neues Formuzlarverpasst und zeige dieses bei einem Buttonclick an:
Delphi-Quellcode:
procedure TMainPage.TlbModalClick(Sender: TObject);
begin
Modalform.ShowModal;
end;
Auf der Modalform hab ich einen Button und ein Edit:
Delphi-Quellcode:
procedure TModalform.BitBtn1Click(Sender: TObject);
begin
Edit1.Text := HelpTestMain.MainPage.PageControl1.ClassName
end;
Irgendwie hatte ich den Verdacht, dass ein Zugriff auf die Hauptform diese aktivieren könnte - wobei mein Zugriff sehr minimal ist und so (noch?) keinen Einfluss hat.
Ausserdem hab ich getestet, wie sich die Form verhält, wenn sie über das x rechts oben geschlossen wird:
Delphi-Quellcode:
procedure TModalform.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Showmessage('OnClose!');
end;
procedure TModalform.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Showmessage('FormCloseQuery!');
end;
procedure TModalform.FormDeactivate(Sender: TObject);
begin
Showmessage('FormDeactivate!')
end;
Also der selbe Ablauf, wie über einen schliessen-Button oder wasauch immer.
Zitat:
Und wenn die Situation eintritt, dass das Fenster von Form1 nach vorne kommt, kann darin nicht geklickt werden (da die Form1 ja unterbrochen ist), sondern für den Anwender fühlt sich das son an, als wenn die Anwendung sich aufgehängt hat, bzw. das "sein Programm" (=> Form2) verschwunden ist. Mit dem ModalResult habe ich bisher nicht gearbeitet, weil ich damit keine Steuerung bauen wollte, sondern über den Mechanismus Form2.ShowModal
sicherstellen wollte, dass der Anwender nur das "richtige" Fenster 2 verwendet.
Ich hoffe mal, dass mein Vorgehen nun etwas genauer herausgearbeitet ist.
Ja, das ist es. Wie Hoika geschrieben hat, solltest du herausfinden, wann und möglichst warum dieses Verhalten auftritt. Ich verwende dazu eine Stringliste, die ich beim Beenden abspeichere, so dass ich nach Beenden der Anwendung nachlesen kann, was in welcher Reihenfolge und mit welchen Werten abgearbeitet wurde.
Gruss
Delbor