![]() |
Delphi-Version: 5
Individuelle, eigene Messages erzeugen und abarbeiten
Hallo Wissende,
ich bin am verzweifeln. Kann mal jemand kurz und knapp erläutern, wie man eigene, individuelle Windows-Messages erzeugt und abarbeitet. Herausgefunden habe ich bis jetzt folgendes: Windows-Messages erzeugt man u. a. durch
Delphi-Quellcode:
Soweit ich weiter verstanden habe, wird dadurch automatisch
BOOL PostMessage(
HWND hWnd, // handle of destination window UINT Msg, // message to post WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );
Delphi-Quellcode:
aufgerufen und man kann innerhalb der Prozedur darauf reagieren.
.WndProc(var Message: TMessage)
Was mache falsch, wenn a)
Delphi-Quellcode:
nicht aufgerufen wird oder wenn b)
.WndProc
Delphi-Quellcode:
nicht gleich
var Message
Delphi-Quellcode:
von
Msg
Delphi-Quellcode:
ist?
PostMessage
|
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Kannst du dein Problem bitte noch mal genauer erläutern?
|
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Zitat:
Delphi-Quellcode:
eine Windows-Message.
PostMessage(HWND(hUser), hUser, 0, 0);
In meiner Klasse habe ich eine eigene
Delphi-Quellcode:
-Methode implementiert:
.WndProc
Delphi-Quellcode:
Soweit ich das verstanden habe müßte diese nach dem Senden aufgerufen werden.
procedure TMeineKlasse.WndProc(var Message: TMessage);
begin begin // mach was end; inherited; end; Aber das passiert nicht. Was mache ich falsch? |
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Hast du auch eine Nachrichtenschleife, die die Nachrichten aus der Nachrichtenschlange abholt und die WndProc weitergibt?
|
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Ich handhabe das immer so:
-- EDIT: Funktionierender Code ![]() Hat bisher immer geklappt. |
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Zitat:
Wie muss ich das denn machen? |
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Zitat:
Aber: Ich möchte die Verbindung zwischen der aufrufenden Windows-Message und der durch diese aufgerufenen Prozedur nicht fest in der Klasse implementieren. Die Message-ID soll dem Objekt beim Create mit übergeben werden können. Daher kann ich nicht mit einer Konstanten arbeiten. |
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Ich muss auch noch schnell zurück rudern! Das Problem an meinem Code ist, dass das (Window-)Handle fehlt, an welches die Nachricht geschickt werden kann. Denn nur dann wird die
Delphi-Quellcode:
angesprungen.
WndProc()
Hier die funktionierende Version.
Delphi-Quellcode:
-- EDIT: Dann bau halt eine passende if-Abfrage in die WndProc-Methode ein.
const
WM_MY_MESSAGE = WM_USER + 100; type TTest = class(TObject) private FHandle : HWND; procedure WndProc(var Msg: TMessage); procedure OnMyMessage(var Msg: TMessage); message WM_MY_MESSAGE; public constructor Create(); reintroduce; destructor Destroy(); override; end; procedure TTest.WndProc(var Msg: TMessage); begin Dispatch(Msg); end; procedure TTest.OnStartupMessage(var Msg: TMessage); begin if (Msg.Msg = WM_MY_MESSAGE) then begin end; end; constructor TTest.Create(); begin inherited Create(); FHandle := Classes.AllocateHWnd(Self.WndProc); end; destructor TTest.Destroy(); begin DeallocateHWnd(FHandle); inherited Destroy(); end; |
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Zitat:
Delphi-Quellcode:
verzichten?
procedure OnMyMessage(var Msg: TMessage); message WM_MY_MESSAGE;
Verwende Delphi 5.
Delphi-Quellcode:
kennt der Compiler nicht... :(
AllocateHWnd
|
AW: Individuelle, eigene Messages erzeugen und abarbeiten
Zitat:
Wie kann ich denn den Lösungsansatz von s.h.a.r.k ohne
Delphi-Quellcode:
unter Delphi 5 realisieren?
AllocateHWnd
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 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 by Thomas Breitkreuz