AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Verrückte Eventreihenfolge, wenn Fenster mit ShowModal geöffnet wurde
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von freejay · begonnen am 14. Dez 2017 · letzter Beitrag vom 15. Dez 2017
 
freejay

Registriert seit: 26. Mai 2004
Ort: Nürnberg
273 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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz