Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MessageDlg lässt keine Nachrichtenverarbeitung zu (https://www.delphipraxis.net/73839-messagedlg-laesst-keine-nachrichtenverarbeitung-zu.html)

PeterPanino 24. Jul 2006 19:26


MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Hallo,

ich habe einen MessageDialog mit einem Hilfe-Button:

MessageDlg('MessageDlg HelpContext', mtInformation, [mbOK, mbHelp], 1000);

Während zur Programm-Laufzeit dieser Dialog angezeigt wird und der Dialog auf die Betätigung des OK-Buttons wartet, kann das Programm offensichtlich keine Nachrichten verarbeiten, denn: Wenn ich auf den Hilfe-Button klicke, wird das Hilfe-Fenster angezeigt; sobald das Hilfe-Fenster dann geschlossen wird, bleibt das Abbild des Hilfe-Fenster aber auf dem Programmfenster erhalten, weil das Programm seine Oberfläche nicht neu zeichnet, weil es ja auf die Rückkehr des Message-Dialogs wartet.

Wie kann man nun erreichen, dass das Programm Nachrichten verarbeitet und seine Oberfläche neu zeichnet, während es auf die Rückkehr des Message-Dialoges wartet? Kann man da irgendwie ein Application.ProcessMessages einbauen, das im Hintergrund die Nachrichten verarbeitet?

Vielen Dank schon mal im Voraus!

Christian Seehase 24. Jul 2006 23:36

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Moin Peter,

Zitat:

Zitat von PeterPanino
sobald das Hilfe-Fenster dann geschlossen wird, bleibt das Abbild des Hilfe-Fenster aber auf dem Programmfenster erhalten, weil das Programm seine Oberfläche nicht neu zeichnet,

:shock:

da frage ich mich, wie Du das hinbekommen hast...

PeterPanino 25. Jul 2006 03:00

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Zitat:

Zitat von Christian Seehase
Moin Peter,

:shock:

da frage ich mich, wie Du das hinbekommen hast...

so wie ich es beschrieben habe. Was ist daran so ungewöhnlich?

mkinzler 25. Jul 2006 05:27

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Bastel die nen eigenen MessageDialog.

sh17 25. Jul 2006 07:26

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Der MessageDialog verhält sich wie jeder andere modale Dialog. Die Anwendung wartet bis zur Beendigung des Dialoges.

Man müsste den Dialog in einen Thread auslagern, wobei man da bestimmt noch einige Synchronisationssachen beachten müsste (schätz ich mal).

Allerdings erschließt sich mir der Sinn eines asynchronen modalen Dialoges aus Benutzersicht nicht. Ich würde da eher zu so was wie einem DesktopAlert tendieren. ALso einem popup-Infofenster, was nach gegebener Zeit wieder verschwindet.

Christian Seehase 25. Jul 2006 08:56

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Moin Peter,

Zitat:

Zitat von PeterPanino
so wie ich es beschrieben habe. Was ist daran so ungewöhnlich?

ich musste bislang nicht in die Trickkiste greifen, damit sich das Hauptfenster zu einer Message neu zeichnet.
Mit einem D2006 Programm habe ich das jetzt nicht explizit ausprobiert, kann mir aber nicht vorstellen, dass es da anders aussieht.

sh17 25. Jul 2006 11:59

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
vieleicht stellt er eine Komponente vor dem Dialog auf BeginUpdate o.ä.

himitsu 25. Jul 2006 14:23

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Da du 'ne Pro hast, kann ich dir nur mal 'nen Tipp geben ... schau dir mal an, wie das Borland in seinen Dialogen macht.

also mal ShowModal (von TForm) reinschauen ... eventuell war's auch in einer darin aufgerufenen Funktionen, oder in einer die dann da aufgerufen wurde, oder ... na ja, jedenfalls irgendwo darin findest du eine nette Nachrichtenschleife, welche das Programm sozusagen am Leben erhält, solange deer Dialog aktiv ist ^^

PeterPanino 25. Jul 2006 20:29

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Zitat:

Zitat von sh17
vieleicht stellt er eine Komponente vor dem Dialog auf BeginUpdate o.ä.

Das war's! Das muss wohl die Sommerhitze sein ...! :wall:

Vielen Dank jedenfalls für eure Hilfsbereitschaft!

Tut mir leid, dass ich euch deswegen auf Trab gebracht habe - dafür spendier' ich jedem ein virtuelles Bier! :cheers:

---

Apropos, hat das eigentlich einen Nebeneffekt, wenn nach einem BeginUpdate möglicherweise 2 mal EndUpdate aufgerufen wird? (Oder wenn nach einem 2-maligen BeginUpdate nur 1 mal EndUpdate aufgerufen wird?)

Christian Seehase 25. Jul 2006 21:41

Re: MessageDlg lässt keine Nachrichtenverarbeitung zu
 
Moin Peter,

wenn ich mir die Sourcen so ansehe:
Die Items werden erst aktualisiert, wenn FUpdateCount = 0 ist.
Bei BeginUpdate wird der Zähler um eins erhöht, bei EndUpdate um eins verringert.

Da kannst Du Dir ausrechnen, was passiert, wenn die Anzahl nicht stimmt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.
Seite 1 von 2  1 2      

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