AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Showmodal sperrt zyklisches Event

Ein Thema von Delphi_Rainer · begonnen am 10. Jun 2021 · letzter Beitrag vom 10. Jun 2021
Antwort Antwort
Delphi_Rainer

Registriert seit: 24. Apr 2009
11 Beiträge
 
#1

Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 11:31
Hallo !

Ich habe ein Problem mit showmodal und einer Ereignisroutine.

Ich habe eine Schnittstelle die Daten liest und immer wenn eine Anforderung gesendet wird, wird nach einer gewissen Zeit ein Ereignis ausgelöst das die Daten Zurückliefert.
Die Schnittstelle läuft in im Hauptprozess der Delphi Anwendung.
Wenn nun ein Klick auf ein Button im Formular gemacht wird, dann wird ein Fenster mit showmodal geöffnet.

Jetzt kommt der Fehler:

Wenn die Hauptanwendung gerade in der Ausführung des Ereignis steckt, dann wird das Ereignis solange nicht mehr ausgeführt bis das Modale Fenster geschlossen wird !!

Meine Schnittstelle bekommt dann keine Daten mehr !!!

Das heißt das wenn in irgend ein Event im Hauptprozess ein Modales Fenster durch buttonclick() aufgerufen wird, das Ereignis sperrt. Das kann doch nicht Sinn eines Modales Fensters sein ??

Gruß Rainer




Hat jemand ein Lösungsansatz ?
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#2

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 11:51
Hallo Rainer,

so ganz kann ich dem nicht folgen. Grundsätzlich werden Ereignisse (Windows Botschaften) weiterhin empfangen, auch wenn ein modales Fenster geöffnet ist. Natürlich nur solange die Botschaftsverarbeitung der Anwendung auch aktiv ist - heißt "Application.ProcessMessages" wird aufgerufen. Das wird normalerweise von der VCL automatisch erledigt.

Kommunikation mache ich üblicherweise in einer eigenen Thread. Diese läuft dann komplett unabhängig vom Vordergrund. Allerdings aktualisiere ich z.B. die Anzeigen im Hauptfenster via Timer oder Thread-Sync Mechanismen. Funktioniert beides gut.

Frage: Was passiert in Deinem modalen Dialog? Rufst Du da irgendeine Funktion auf die dann solange ausgeführt wird bis der Dialog beendet ist?

Gruß
Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Delphi_Rainer

Registriert seit: 24. Apr 2009
11 Beiträge
 
#3

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 12:20
Hallo BigAll

Windows Botschaften werden ja noch abgeholt.

Ich erkläre nochmal kurz meine Schnittstelle.

1. Die Schnittstelle hat 10 Komponenten.
2. Jede Komponente hat ein Timer (Aufruf des Request)
3. Jede Komponente hat ein Event (Auswertung des Response)

Wenn der Fehler auftritt, dann werden auch alle anderen 10 Timer Ereignisse, aber nur 9 Response Ereignisse ausgeführt.

Ich habe ein internen Logger in der Anwendung integriert.

Da sieht man folgendes (ausschnitt aus dem Protokoll)

1. Timer Start Komp 2
2. Senden Komp 2 (Request)
3. Timer Ende Komp 2
4. Event Start Komp 2 (Response).
5. Event Ende Komp 2 (Response).
6. Timer Start Komp 3
7. Senden Komp 3 (Request)
8. Timer Ende Komp 3
9. Event Start Komp 3 (Response).
10. Buttonclick() -> Aufruf Fenster showmodal
11. Timer Start Komp 4
12. Senden Komp 4 (Request)
13. Timer Ende Komp 4
14. Event Start Komp 4 (Response).
15. Event Ende Komp 4 (Response).


Protokoll "Event Ende Komp 3" kommt erst wenn das modale Fenster wieder geschlossen wird.

Gruss Rainer
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#4

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 12:23
Was verstehst Du unter "Schnittstelle"? Mit was / wem wird über was kommuniziert?
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Delphi_Rainer

Registriert seit: 24. Apr 2009
11 Beiträge
 
#5

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 12:30
Hallo

Also wenn ich eine simple Anwendung mit einem Timer (Event mit 100 ms) habe,
der mir die Uhrzeit anzeigt, und ich ein Modales Fenster gerade in der Abarbeitung des Events ausführe und
das Fenster offen lasse, meine Ausgabe der Uhrzeit dann stehen bleibt ????

Gruß Rainer
  Mit Zitat antworten Zitat
Delphi_Rainer

Registriert seit: 24. Apr 2009
11 Beiträge
 
#6

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 12:33
Hallo BigAl

Wenn ich folgendes mache

procedure form1.OnTimerEvent(sende:TObject);
begin
panel1.caption:=datetimetostr(now);
form2.showmodal;
end;

Dann würde ich es verstehen !!!

Aber ich rufe das Fenster in OnButtonclick auf.

Gruß Rauner
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 12:22
Hallo,
aber genau das ist der Sinn von "modal", oder nicht?.
Die Nachrichten bekommt das modale Fenster.

Lösung1: Threads
Lösung2: ?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#8

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 16:06
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")
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#9

AW: Showmodal sperrt zyklisches Event

  Alt 10. Jun 2021, 21:46
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...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:59 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