![]() |
Empfang einer mit RegisterWindowMessage erzeugten Message
Ich hab folgendes Problem:
Ich erzeuge mit RegisterWindowMessage eine Message. Diese verschicke ich mit SendMessage an HWND_BROADCAST. Das geschieht in einer DLL, es dürfte aber keine Rolle spielen, ob es nun in einer DLL passiert oder aus einem Programm heraus. Nun will ich diese Nachricht in einem anderen Programm enpfangen. Prozeduren ausführen, wenn eine Message empfangen wird, macht man ja in VCL-Programmen so (oder so ähnlich):
Code:
Das Problem ist jetzt aber, dass ich den Wert von WM_IRGENDWAS erst zur Laufzeit bekomme. Ich muss ihn aber schon zum Entwicklungszeitpunkt angeben.
procedure MachWas(var Msg: TMessage); message WM_IRGENDWAS;
Wie kann ich das also machen? Danke schon im Voraus.[/b] |
Moin Chewie,
Du brauchst nicht für jede Message eine eigene Methode. Prinzipiell kannst Du das alles in der WndProc abarbeiten.
Code:
[b]type[/b]
TForm1 = [b]class[/b](TForm) [b]private[/b] [b]protected[/b] [color=#000080]// Die Default WndProc überschreiben[/color] [b]procedure[/b] WndProc([b]var[/b] msg : TMessage); override; [b]public[/b] [b]end[/b]; [b]var[/b] Form1: TForm1; [color=#000080]// Die selbst registrierte Message steht in dwMessage zur Verfügung[/color] dwMessage : DWORD; [b]implementation[/b] [color=#000080]{$R *.DFM}[/color] [color=#000080]// Abfragen der Message[/color] [b]procedure[/b] TForm1.WndProc([b]var[/b] msg : TMessage); [b]begin[/b] [b]if[/b] msg.Msg = dwMessage [b]then[/b] [b]begin[/b] [color=#000080]// Was auch immer passieren soll, wenn Deine Message empfangen wurde;[/color] [b]end[/b] [b]else[/b] [b]begin[/b] [color=#000080]// Wichtig, damit der Rest auch noch funktioniert.[/color] [color=#000080]// man kann die ursprüngliche WndProc auch immer aufrufen,[/color] [color=#000080]// was aber im Falle einer eigenen Message eher unwichtig ist[/color] [color=#000080]// Fängt man "normale" Messages ab, kommt's drauf an, ob die[/color] [color=#000080]// Originalmessage standardmässig verarbeitet werden soll oder nicht.[/color] [b]inherited[/b] WndProc(msg); [b]end[/b]; [b]end[/b]; |
Ahh, OK, gut dass ich das so machen kann. Ich wusste nicht, dass ich die Fenster-Prozedur in VCL-Programmen (fast) so benutzen kann wie in nonVCL.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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