Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Verrückte Eventreihenfolge, wenn Fenster mit ShowModal geöffnet wurde (https://www.delphipraxis.net/194633-verrueckte-eventreihenfolge-wenn-fenster-mit-showmodal-geoeffnet-wurde.html)

hoika 14. Dez 2017 22:28

AW: Verrückte Eventreihenfolge, wenn Fenster mit ShowModal geöffnet wurde
 
Hallo,
du kannst ein Fenster auch semimodal öffnen.
Nach aussen hin (für den Benutzer) ist es modal,
aber intern (für den Programmierer) wird es mit Show geöffnet
und man kann seine Berechnungen laufen lassen.

Und da es mit Show geöffnet wird, funktioniert z.B. auch ein Cancel-Button.

Delphi-Quellcode:
// Erzeugen
var
  WindowList : Pointer;

  Form:= TForm1.Create(nil);
  WindowList:= DisableTaskWindows(Form.Handle);
  Form.Show;
  Application.ProcessMessages;

// Freigeben
  Form.FCanClose := True;
  EnableTaskWindows(WindowList);
  Form.Free;

himitsu 15. Dez 2017 00:17

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

Zitat von hoika (Beitrag 1388889)
du kannst ein Fenster auch semimodal öffnen.
...

Dann raucht aber sein Button-Code ab, denn das Hauptproblem ist, dass der sich nicht beendet, sobald das Fenster zu gehn soll.
Also ginge das Fenster wirklich zu und würde freigegeben.

Auch in deinem Code bleibt es dann in dem ProcessMessages (nach Show) hängen, bis der Button fertig ist.
und da fehlt auch noch eine Schleife um das ProcessMessages, denn sonst rauscht es sofort bis zum Free durch (ShowModal wartet von selber) und die Form ist sofort wieder weg.

Selbst wenn das Fenster geschlossen/ausgeblendet wird, dann müsste danach dennoch bis zur Freigabe gewartet werden, bis der Button fertig ist (was in einem Thread nicht möglich ist ... klingt fast nach 'nem Deadlock).
Also ob sichtbar oder unsichtbar, gewartet werden muß immer, wenn seine Arbeitsschleife sich nicht beendet.

freejay 15. Dez 2017 07:57

AW: Verrückte Eventreihenfolge, wenn Fenster mit ShowModal geöffnet wurde
 
Danke an alle für Eure Anregungen.

Ich werde das jetzt mit einem Thread und OnTerminate lösen. Dann läuft kein Button-Code, der die Ausführung von OnClose verhindern/verschieben könnte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz