![]() |
"Application.OnMessage" wird 30x hintereinander au
Hi Leute,
ich habe folgendes Problem... Ich möchte gerne 2 Anwendungen untereinander kommunizieren lassen. Dies möchte ich mit Messages realisieren. HCWM_SET wird mit RegisterWindowMessage erstellt. Funktioniere tu alles ganz ausgezeichnet nur wird meine Nachricht um die 30x bearbeitet... 1x würde mir reichen. :bounce1: Ich bekomme also 30x meine Meldung "SET-OK" aufgepopt... :wall: Ich dachte Handled auf True setzen sagt... "behandelt" !? Wie macht man das nun richtig?
Code:
Vielen Dank für die Hilfe... Schuki...
...
protected procedure MyMessage(var Msg:TMsg; var Handled:Boolean); ... procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage:=MyMessage; end; procedure TForm1.MyMessage(var Msg:TMsg; var Handled:Boolean); begin if Msg.message=HCWM_SET then begin ShowMessage('SET-OK'); Handled:=True; end; end; |
Re: "Application.OnMessage" wird 30x hintereinande
Und wie sieht der Code der "Sender-"-Applikation aus?
|
Re: "Application.OnMessage" wird 30x hintereinande
Hi,
na so... :) Sorry hatte ich vergessen... :cry:
Code:
Gruß Schuki...
if intAction<>0 then PostMessage(HWND_BROADCAST,HCWM_SET,0,0);
|
Re: "Application.OnMessage" wird 30x hintereinande
hi,
wie wärs wenn du ne globale var machst die du dann auf true setzt wenn das einmal durchgelaufen ist ?
Delphi-Quellcode:
(nicht getestet, müsste aber klappen)
procedure TForm1.MyMessage(var Msg:TMsg; var Handled:Boolean);
begin if ( not handled ) and ( Msg.message=HCWM_SET ) then begin ShowMessage('SET-OK'); Handled:=True; end else exit; end; Powerstreamer |
Re: "Application.OnMessage" wird 30x hintereinande
HWND_BROADCAST zu verwenden ist m. E. schlecht. Da wird jetzt jedes Fenster benachrichtigt (und auch noch 'ne ganze Menge an unnützer Rechenzeit verbraten.
Sende doch nur an das Hauptformular oder an eine Art "Kommunikationsfenster" diese Nachricht. |
Re: "Application.OnMessage" wird 30x hintereinande
Hi,
danke für die Hinweise... Ok das mit dem Hilfsfebster ist so ne Sache... Das hatte ich vorher gemacht... Problem war da aber das wenn die eigendliche Anwendung die ferngesteuert werden sollte, minimiert war... kam die Nachricht nicht an. :cry: Nun dachte ich es währe mit der "PostMessage" Variante besser... Klar wenn es eine Lösung gibt das auch eine minimierte Anwendung oder besser das Fenster auch Nachrichten empfangen kann wenn es minimiert ist ist die vorzuziehen !!! Da stimme ich zu! Problem ist dann wieder... wie bekomme ich das Handle der Anwendung... FindWindow ist mir zu "ungenau" gibt es eine Möglichkeit die über den Pfad der EXE herauszubekommen? MfG Schuki... |
Re: "Application.OnMessage" wird 30x hintereinande
Zitat:
Zitat:
Alternative Kommunikationswege wäre z.B. über Named Pipes zu gehen. Oder falls der Registrierungsaufwand (Admin-Rechte) nicht stört, die Kommunikation über ein Automatisierungsschnittstelle laufen zu lassen. |
Re: "Application.OnMessage" wird 30x hintereinande
Zitat:
Also wann will man die Variable auf false setzten? Wieviel von dennen soll man denn verbauen wenn man mehr als eine Message verarbeiten will. Es muss doch eine Lösung geben wie man die Behandlung der Nachricht richtig abschließt. Wofür steht den die (...; var Handled:Boolean) ??? :wall: so langsam tut es weh... :stupid: @Bernhard Ja ich bin am verzweifeln... :gruebel: nutze hier im Übrigen WinXP... MfG Schucki... |
Re: "Application.OnMessage" wird 30x hintereinande
Wenn es schon unbedingt HWND_BROADCAST sein muss.
Dann fange die Nachricht lieber in einem Top-Level-Fenster ab (via WndProc). |
Re: "Application.OnMessage" wird 30x hintereinande
Alles super... :thuimb:
nun mal eine Stufe tiefer angesetzt oder ? Aber es soll mir recht sein... :bounce1: Wichtig ist das es geht ohne 30x aufpopen... :lol: Und es geht auch wenn es minimiert ist... Ich danke Euch für die Infos! Der Quelltext vom Empfänger...
Code:
...und vom Sender...
procedure TForm1.WndProc(var Msg:TMessage);
var intAction,intAdd:integer; begin if Msg.Msg=HCWM_GET then begin SchowMessage('SET-OK!'); end; inherited WndProc(Msg); end;
Code:
Was noch interessant währe wie setzt man nun an wenn man nun nicht nur Zahlen übertragen möchte...
SendMessage(HWND_BROADCAST,HCWM_GET,0,0);
...sondern auch mal eine Zeichenkette ? Gruß Schucki... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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