Einzelnen Beitrag anzeigen

freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
269 Beiträge
 
Delphi 11 Alexandria
 
#1

Verrückte Eventreihenfolge, wenn Fenster mit ShowModal geöffnet wurde

  Alt 14. Dez 2017, 15:22
Hallo zusammen,

vielleicht muss ich das ja auch einfach nur so hinnehmen, aber vielleicht kann man es auch verstehen und vielleicht macht das auch für irgendwas Sinn:

Ich habe ein Fenster, in dem eine Prozedur (mittels eines ButtonClicks gestartet) über einen längeren Zeitraum läuft. Diese Prozedur ruft dabei regelmäßig Application.ProcessMessages auf, damit man das Fenster trotzdem schließen und damit den Prozess abbrechen kann. Dazu habe ich das Event OnClose des Formulars gefüllt und setze dort ein Flag, dass die lang laufende Prozedur prüft und gegebenenfalls abbricht.

So weit, so simpel.

ABER:

Das funktioniert nur, wenn man das Fenster mit Show aufgerufen hat!

Wenn man das Fenster mit ShowModal aufruft, dann wird - trotz Application.ProcessMessages - das OnClose-Event erst ausgelöst bzw. verarbeitet, wenn der laufende Prozess (das ButtonClick-Event) vollständig durchgelaufen ist!

Da rollen sich mir glatt die Fußnägel auf!

Kann mir das irgendwer begründen/erklären?

PS: Ich habe das mit einem frischen Projekt getestet, bei dem das vom Hauptformular geöffnete zweite Formular nur einen Button und folgenden Code hat:

Delphi-Quellcode:
procedure TfSubWindow.btDoSomethingClick(Sender: TObject);
var
  OldTime: TDateTime;
begin
  OldTime := now;

  while SecondsBetween(Now,OldTime) < 10 do
    Application.ProcessMessages;
end;

procedure TfSubWindow.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Beep;
end;
Das Beep wird erst nach dem END von btDoSomethingClick ausgeführt, falls das Formular mit ShowModal geöffnet wurde...
[Delphi 11.3.1 Enterprise; Win10/11; MySQL; VCL]
  Mit Zitat antworten Zitat