Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Windows-Message WM_... abfangen ??? (https://www.delphipraxis.net/61488-windows-message-wm_-abfangen.html)

TriphunEM 22. Jan 2006 08:10


Windows-Message WM_... abfangen ???
 
hallo. mit folgende code ist es ja möglich eine message für alle komponenten bzw. fenster einer Anwednung abzufangen.
Delphi-Quellcode:
private
  { Private-Deklarationen }
  procedure GetMessages(var msg: TMsg; var handled: boolean);
...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage:=GetMessages;
end;

procedure TForm1.GetMessages(var msg: TMsg; var handled: boolean);
begin
  if msg.message = WM_RBUTTONDOWN then
  begin
    // was ausgführt werden soll
    handled:=true;
  end;
end;
das funktioniert auch soweit, bis auf ein Item eines Mainmenüs was ich in eine Toolbar gesteckt habe!

Warum funktioniert es dort nicht?

Hat da jemand eine Idee?

Danke im voraus???

ichbins 22. Jan 2006 08:14

Re: Windows-Message WM_... abfangen ???
 
Die Toolbar "sieht sich" als vollwertiges Fenster und erhebt anspruch auf eine eigene Nachrichtenschleife und fängt die Nachrichten somit selbst ab.

TriphunEM 22. Jan 2006 09:30

Re: Windows-Message WM_... abfangen ???
 
danke für die antwort.

gibt es denn die möglichkeit die botschaften die an die toolbar gesendet werden abzufangen?

Die Muhkuh 22. Jan 2006 10:17

Re: Windows-Message WM_... abfangen ???
 
Hier im Forum suchenHooks

TriphunEM 22. Jan 2006 10:39

Re: Windows-Message WM_... abfangen ???
 
nach hooks hab ich auch schon gekuckt, aber nicht wirklich was passendes gefunden.

hättest du rat für mich?

Die Muhkuh 22. Jan 2006 10:40

Re: Windows-Message WM_... abfangen ???
 
Hi,

ich kenne mich selbst nicht mit Hooks aus, aber für dein Vorhaben wirst du imho (!) Hooks benutzen müssen.

jfheins 22. Jan 2006 11:23

Re: Windows-Message WM_... abfangen ???
 
Du kannst auch (meintest du das mit Hooks ?) die WndProc der Toolbar umbiegen:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
      OldProgressWndProc: TWndMethod;
      procedure ProgressWndProc(var Msg: TMessage);


...


procedure TForm1.FormCreate(Sender: TObject);
begin
  OldProgressWndProc := ToolBar1.WindowProc;
  ToolBar1.WindowProc := ProgressWndProc;
end;

procedure TForm1.ProgressWndProc(var Msg: TMessage);
begin
  // Hier Messages abfangen bevor die Toolbar reagieren kann
  OldProgressWndProc (Msg);
  // Hier Messages abfangen nachdem die Toolbar reagiert hat
end;
So in etwa - dann kriegst du alle Nachrichten, die die Toolbar bekommt ... ;)

TriphunEM 22. Jan 2006 12:46

Re: Windows-Message WM_... abfangen ???
 
danke, das funktioniert schonmal gut. ich fang jetzt die botschaften vorher ab.
allerdings scheint das Mainmenu bzw. die items des Mainmenüs die botschaften immer noch abzufangen.

Delphi-Quellcode:
Mainmenu1.WindowProc:=ProgressWndProc;
gibt es ja leider nicht. hat noch jemand dafür ein lösung??? denn dann sollte mein problem gelöst sein!!!

TriphunEM 22. Jan 2006 12:57

Re: Windows-Message WM_... abfangen ???
 
mmhhh. ich hab mal mit winspector gekuckt, und wenn das mainmenü in der toolbar aufpoppt und ich mit der rechten maustaste auf ein item klicke, wird keine Botschaft gesendet! weder ein rbuttondown noch ein menurbuttonup!!!

Was ist den da los?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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