Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Showmodal sperrt zyklisches Event (https://www.delphipraxis.net/208107-showmodal-sperrt-zyklisches-event.html)

Delphi_Rainer 10. Jun 2021 14:28

AW: Showmodal sperrt zyklisches Event
 
Hallo !

Ja die Anwendung ist so programmiert das der Anwender erst Eingaben , Auswahl einer Funktion ausführen darf bevor er eine andere Funktion ausführen kann. Ist vom Kunden so vorgegeben.

Aber...Warum unterbricht Delphi mitten im Event die Ausführung und öffnet das Modale Fenster ???

Das ist doch falsch !!!

Gruß Rainer

EmWieMichael 10. Jun 2021 14:36

AW: Showmodal sperrt zyklisches Event
 
Zitat:

Zitat von Delphi_Rainer (Beitrag 1490962)
...
Aber...Warum unterbricht Delphi mitten im Event die Ausführung und öffnet das Modale Fenster ???
...

Nimm doch mal "application.ProcessMessages" raus.

Blup 10. Jun 2021 14:42

AW: Showmodal sperrt zyklisches Event
 
Ursache ist klar das application.ProcessMessages innerhalb eines Timer-Ereignisses aufgerufen wird.
Wenn innerhalb dieses application.ProcessMessages dann ShowModal aufgerufen wird, wartet die Anwendung an dieser Stelle und setzt das Timer-Ereigniss erst danach fort.

BerndS 10. Jun 2021 14:51

AW: Showmodal sperrt zyklisches Event
 
Dein Beispiel macht mit drei kleinen Änderungen das, was du warscheinlich erreichen willst.
Aber ich würde das Design überdenken und eine andere Lösung suchen.
1. Änderung Unit2:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
 form1.show;
end;
2./3. Änderung Unit1
Delphi-Quellcode:
implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.FormHide(Sender: TObject);
begin
  Form2.Enabled := True;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Enabled := False;
end;

himitsu 10. Jun 2021 15:06

AW: Showmodal sperrt zyklisches Event
 
Der nachfolgende Code in diesem Event (ButtonClick) wartet natürlich so lange, bis das ShowModal fertig ist (also nachdem das Fenster wieder geschlossen wurde) ... darum heißt es ja auch "modal".

Andere Events (Timer) können wärenddessen gesatertet werden.
Auf anderen Fenstern könnte man sogar wärenddessen Buttons klicken. (wenn sie nicht durch das Modal "disabled" würden ... z.B. wenn man in einem Timer ein neues Fenster öffnet, oder bei gesperrten Fenstern Diese wieder "enabled")

BigAl 10. Jun 2021 20:46

AW: Showmodal sperrt zyklisches Event
 
Natürlich wartet der Code im ButtonClick. Das modale Fenster könnte auch was zurück liefern. Normalerweise frage ich das ModelResult ab um z.B. zu erkennen wie der User den Dialog verlassen hat. Aber das ändert nichts daran, dass die Botschaftsverarbeitung des aufrufenden Formulars weiterhin funktioniert - also z.B. Timer-Ereignisse ausgelöst werden.

Das mit dem ProcessMessages wurde auch missverstanden. Das sollte dann eingesetzt werden wenn man längere Verarbeitung macht. Im Timer-Event macht das ja nicht wirklich Sinn...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 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