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 Window Message an eigenes Fenster abfangen (https://www.delphipraxis.net/78931-window-message-eigenes-fenster-abfangen.html)

Eichhoernchen 13. Okt 2006 10:42


Window Message an eigenes Fenster abfangen
 
Hi, ich bekomme von einem anderem Programm eine Window Message geschickt, die heißt WM_INFRA_IO und hat den Wert: 49408

Wenn ich nun folgedes Versuche:

Delphi-Quellcode:
const
   WM_INFRA_IO = 49408;

type
  TWndTestWnd = class(TForm)
   {...}
  private
    procedure MessageSend(var AMsg: TMessage); message WM_INFRA_IO;
  public
    { Public-Deklarationen }
  end;
dann bekomme ich beim compilieren folgende Fehlermeldung:
Delphi-Quellcode:
[Pascal Fehler] Unit1.pas(17): E2139 Ungültiger Botschaftsmethoden-Index
Ohne Konstante und einfach nur die Zahl ergibt den selben Fehler. Also, wie schaff ich es diese Message abzufangen?


Eichhoernchen

chrisw 13. Okt 2006 10:51

Re: Window Message an eigenes Fenster abfangen
 
nimm doch
Delphi-Quellcode:
const
WM_INFRA_IO = WM_USER + 0;
oder "RegisterMessage" um eine gültige Message zu bekommen

Eichhoernchen 13. Okt 2006 10:56

Re: Window Message an eigenes Fenster abfangen
 
wie WM_USER + 0

das wäre doch 1024... aber ich will doch 49408 anfangen,
ich kann WM_INFRA_IO nicht selbst bestimmen, dass hab ich nur festgestellt, dass diese Message vom anderem Programm an meins
gesendet wird..
Es handelt sich hier um ne IR-Fernbedienung von Creative und man kann durch das anlegen einer Datei, die so heißt wie die Fensterklasse, die Tasten per Sendmessage an das Programm im Vordergrund mit der Fesnterklasse schicken...
nur wird dies eben über diese WM_INFRA_IO Message gemacht.


Ich guck mir dann mal dieses RegisterMessage an!


Edit:

seh ich richtig, dass diese durch registerMessage registrierten messages immer einen unterschiedlichen Wert haben?
Das würde ja heißen, dass WM_INFRA_IO auch den Wert ändern könnte... also muss ich am Anfang per: WM_INFRA_IO = RegisterWindowMessage('WM_INFRA_IO') den richtigen Wert bestimmen, wie kann ich denn dann auf diese Message reagieren?

chrisw 13. Okt 2006 11:05

Re: Window Message an eigenes Fenster abfangen
 
OK, sorry, hab nicht richtig gelesen .

chrisw 13. Okt 2006 11:12

Re: Window Message an eigenes Fenster abfangen
 
Muss Du das dann nicht in WndProc abfangen ?

Delphi-Quellcode:
const
   WM_INFRA_IO = 49408;
type
  TForm1 = class(TForm)
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

procedure TForm1.WndProc(var Message: TMessage);
begin
  if (Message.Msg = WM_INFRA_IO) then
  begin
    // hier behandeln

  end;

  inherited;
end;

Eichhoernchen 13. Okt 2006 11:31

Re: Window Message an eigenes Fenster abfangen
 
achsoo.. ich kenne mich da nicht so aus... ich wusste nicht wie sowas geht, ich teste das mal aus

Edit:

Juhuu klappt, hab es jetzt so gemacht:

Delphi-Quellcode:
type
  TWndTestWnd = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
     procedure WndProc(var Message: TMessage); override;
  public
    { Public-Deklarationen }
  end;

var
  WndTestWnd: TWndTestWnd;
  WM_INFRA_IO: cardinal;


implementation

{$R *.dfm}

{ TForm1 }

procedure TWndTestWnd.FormCreate(Sender: TObject);
begin
 WM_INFRA_IO := RegisterWindowMessage('WM_INFRA_IO');
end;

procedure TWndTestWnd.WndProc(var Message: TMessage);
begin
  if (Message.Msg = WM_INFRA_IO) then
  begin
    showmessage('YEAHHH');
  end;
  inherited;
end;

Dankeschön, aber woher soll man den auch wissen, was man alles überschreiben kann?


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