AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Window Message an eigenes Fenster abfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Window Message an eigenes Fenster abfangen

Ein Thema von Eichhoernchen · begonnen am 13. Okt 2006 · letzter Beitrag vom 13. Okt 2006
Antwort Antwort
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#1

Window Message an eigenes Fenster abfangen

  Alt 13. Okt 2006, 10:42
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:
[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
Jan
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#2

Re: Window Message an eigenes Fenster abfangen

  Alt 13. Okt 2006, 10:51
nimm doch
Delphi-Quellcode:
const
WM_INFRA_IO = WM_USER + 0;
oder "RegisterMessage" um eine gültige Message zu bekommen
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Window Message an eigenes Fenster abfangen

  Alt 13. Okt 2006, 10:56
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?
Jan
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#4

Re: Window Message an eigenes Fenster abfangen

  Alt 13. Okt 2006, 11:05
OK, sorry, hab nicht richtig gelesen .
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Benutzerbild von chrisw
chrisw

Registriert seit: 11. Jan 2005
Ort: Schleswig
193 Beiträge
 
Delphi XE8 Professional
 
#5

Re: Window Message an eigenes Fenster abfangen

  Alt 13. Okt 2006, 11:12
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;
Christian Wahl
me, myself and I, die lustigen Drei !!
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Window Message an eigenes Fenster abfangen

  Alt 13. Okt 2006, 11:31
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?
Jan
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:16 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