AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi "Application.OnMessage" wird 30x hintereinander ausgelöst???
Thema durchsuchen
Ansicht
Themen-Optionen

"Application.OnMessage" wird 30x hintereinander ausgelöst???

Ein Thema von Schucki · begonnen am 17. Jul 2004 · letzter Beitrag vom 18. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#1

"Application.OnMessage" wird 30x hintereinander au

  Alt 17. Jul 2004, 13:32
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.
Ich bekomme also 30x meine Meldung "SET-OK" aufgepopt...
Ich dachte Handled auf True setzen sagt... "behandelt" !?

Wie macht man das nun richtig?

Code:
...
  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;
Vielen Dank für die Hilfe... Schuki...
Frank
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 14:39
Und wie sieht der Code der "Sender-"-Applikation aus?
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#3

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 15:01
Hi,

na so...
Sorry hatte ich vergessen...

Code:
  if intAction<>0 then PostMessage(HWND_BROADCAST,HCWM_SET,0,0);
Gruß Schuki...
Frank
  Mit Zitat antworten Zitat
Benutzerbild von p0w3r5tr34m3r
p0w3r5tr34m3r

Registriert seit: 18. Aug 2003
Ort: Monheim am Rhein
153 Beiträge
 
RAD-Studio 2009 Pro
 
#4

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 15:19
hi,
wie wärs wenn du ne globale var machst die du dann auf true setzt wenn das einmal durchgelaufen ist ?

Delphi-Quellcode:
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;
(nicht getestet, müsste aber klappen)

Powerstreamer
Florian Cülter
ich bin ein notorischer alles-klein-schreiber!

der 100. Beitrag nach 3 Jahren 25 Wochen und einem Tag
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 15:34
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.
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#6

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 15:46
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.

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...
Frank
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 16:23
Zitat von Schucki:
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 !!!
Wuste ich nicht (bzw. hab nicht daran gedacht.

Zitat von Schucki:
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?
Fällt mir im Moment leider keine ein. Es gäbe noch FindWindowEx, aber das wird auch nicht viel besser sein.

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.
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#8

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 16:58
Zitat von p0w3r5tr34m3r:
hi,
wie wärs wenn du ne globale var machst die du dann auf true setzt wenn das einmal durchgelaufen ist ?

Delphi-Quellcode:
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;
(nicht getestet, müsste aber klappen)

Powerstreamer
Denke das es so nicht gedacht ist...
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) ???

so langsam tut es weh...

@Bernhard

Ja ich bin am verzweifeln... nutze hier im Übrigen WinXP...


MfG Schucki...
Frank
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#9

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 17:33
Wenn es schon unbedingt HWND_BROADCAST sein muss.

Dann fange die Nachricht lieber in einem Top-Level-Fenster ab (via WndProc).
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#10

Re: "Application.OnMessage" wird 30x hintereinande

  Alt 17. Jul 2004, 23:51
Alles super...

nun mal eine Stufe tiefer angesetzt oder ?
Aber es soll mir recht sein...

Wichtig ist das es geht ohne 30x aufpopen...
Und es geht auch wenn es minimiert ist...

Ich danke Euch für die Infos!

Der Quelltext vom Empfänger...

Code:
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;
...und vom Sender...

Code:
SendMessage(HWND_BROADCAST,HCWM_GET,0,0);
Was noch interessant währe wie setzt man nun an wenn man nun nicht nur Zahlen übertragen möchte...
...sondern auch mal eine Zeichenkette ?

Gruß Schucki...
Frank
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:26 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