![]() |
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 |
AW: Showmodal sperrt zyklisches Event
Zitat:
|
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. |
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:
2./3. Änderung Unit1
procedure TForm2.Button1Click(Sender: TObject);
begin form1.show; end;
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; |
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") |
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 05:57 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 by Thomas Breitkreuz