![]() |
showmessage
Hallo, kann ich ermitteln ob eine Showmessage sichtbar ist.
Ich lese von einer seriellen Schnittstelle Daten ein. Die Daten werden automatisch gesendet und sollen aber nur ausgelesen werden, wenn diese tatsächlich angfordert wurden also z.b. wenn der Benutzer vorher (shomessage) aufgefordert wurde den Transfer anzustoßen. Auf der COM-Schnittstelle kommen immer wieder merkwürdige nicht bewusst gesendetet Daten an. Wie kann ich eine aktive Message abfragen? |
AW: showmessage
ShowMessage "hält" den Code quasi an. D.h. nach dem ShowMessage('...'); kannst du eine Variable auf true/false setzen o.ä. um dir zu merken ob die Message schon weggeklickt wurde oder nicht.
|
AW: showmessage
Möglicherweise hat OP auch ein Problem mit Threading, das geht aus seinem Post nicht hervor. Wie Neutral General schon sagte, braucht man bei einem einzigen Thread nicht prüfen, ob Showmessage da ist, denn während Showmessage da ist, läuft das Programm nicht weiter.
Anders ist es, wenn man einen weiteren Thread hat. Hier kann man ein Boolean auf True setzen, bevor man die Nachricht anzeigt, und es danach wieder auf False setzen. |
AW: showmessage
Genau, die COM-Schnittstelle wird in einem separaten Thread abgefragt und der wartet nicht bis die Message bestätigt wurde.
Ich werde bei ShowMessage eine Variable setzen. Aber trotzdem: kann man die existenz einer Message abfragen? |
AW: showmessage
Ein
Delphi-Quellcode:
öffnet ein Modales Fenster. Das Vorhandensein aktiver modaler Fenster kannst Du über
ShowMessage
Delphi-Quellcode:
abfragen.
Application.ModalLevel
Ein Wert > 0 bedeutet, dass ein Modales Fenster aktiv ist. |
AW: showmessage
Verwende doch einfach die Windows-Funktion MessageBox und frage das Klickergebnis (Rückgabewert ab):
Delphi-Quellcode:
var
DialogBoxType: UINT; ModalResult: TModalResult; begin DialogBoxType := 0; // OK button only; ModalResult := MessageBox(Application.Handle, 'Hello', 'World', DialogBoxType); if IsPositiveResult(ModalResult) then begin // mach hier deinen Kram! raise EProgrammerNotFound.Create('Möp'); end; end; ![]() |
AW: showmessage
Da hier auch MessageBox erwähnt wurde.
Application.ModalLevel betrifft nur die modalen VCL-Formulare, welche auf TCustomForm aufbauen und für gekapselte Windows-APIs, wo dieser Wert ebenfalls gesetzt wird (Application.ModalStarted und Application.ModalFinished). Eine MessageBox ist ein direkter WinAPI-Aufruf, der zwar sowas wie einen modalen Dialog anzeigt, aber ohne dass ModalLevel darauf reagiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 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-2025 by Thomas Breitkreuz