Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   showmessage (https://www.delphipraxis.net/193805-showmessage.html)

jangbu 11. Sep 2017 15:06

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?

Neutral General 11. Sep 2017 15:09

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.

Redeemer 11. Sep 2017 20:58

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.

jangbu 12. Sep 2017 07:29

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?

TBx 12. Sep 2017 08:12

AW: showmessage
 
Ein
Delphi-Quellcode:
ShowMessage
öffnet ein Modales Fenster. Das Vorhandensein aktiver modaler Fenster kannst Du über
Delphi-Quellcode:
Application.ModalLevel
abfragen.
Ein Wert > 0 bedeutet, dass ein Modales Fenster aktiv ist.

TiGü 12. Sep 2017 09:32

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;
https://msdn.microsoft.com/de-de/lib...(v=vs.71).aspx

himitsu 12. Sep 2017 09:47

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 01:40 Uhr.

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