Aber wie könnte man denn das "ich will einen laufenden Prozess über einen Cancel-Button abbrechen lassen können" sonst lösen?
Genauso wie bei Threads? (Thread.Terminate und IF-Self.Terminated im Thread)
Deine Schleife muß eben auch auf die Beendigung ragieren.
Delphi-Quellcode:
while (SecondsBetween(Now,OldTime) < 10) and (ModalResult = mrNone) do
Application.ProcessMessages;
Und das gilt nicht nur für dein modales Fenster, sonden auch für die ganze Anwendung.
Delphi-Quellcode:
while (SecondsBetween(Now,OldTime) < 10) and (ModalResult = mrNone) and not Application.Terminated do
Application.ProcessMessages;
OnClose und OnCloseQuery werden im DoClose aufgerufen.
Buttons mit ModalResult und TForm.Close setzen eben nur den Status "Liebes Fenster, du darfst dich beenden", aber das wird eben nur/erst im ShowModal ausgewertet, wenn man ihm auch die Möglichkeit dazu gibt.