![]() |
Wo muss die WNDProc eingebunden werden?
Hi Leute,
soweit ich weiß, dient doch die Prozedur WNDProc zur Behandlung von Windowsbotschaften. Aber wo muss ich diese in mein Programm einbinden damit Windows die Botschaften schicken kann?? |
Re: Wo muss die WNDProc eingebunden werden?
Wenn du nicht selbst definierte Nachrichten abfangen willst oder die standard Nachrichten von Windows umbiegen willst, dann brauchst du gar nichts machen, macht alles die VCL für dich.
Delphi-Quellcode:
Mal eben so in einer Minute hingerotzt. :roll:
const
MY_MESSAGE = WM_USER + 1974; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } procedure WndProc(var msg: TMessage); override; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WndProc(var msg: TMessage); begin inherited; case msg.Msg of MY_MESSAGE: Showmessage(PChar(msg.LParam)); end; end; procedure TForm1.Button1Click(Sender: TObject); var Text: String; begin Text := 'Hello world'; SendMessage(Handle, MY_MESSAGE, 0, Integer(PChar(Text))); end; |
Re: Wo muss die WNDProc eingebunden werden?
Wozu muss denn inherited aufgerufen werden?
|
Re: Wo muss die WNDProc eingebunden werden?
Machst du das nicht werden die geerbeten Methoden nicht aufgerufen und alle Nachrichten außer deiner werden nicht korrekt bearbeitet, was katastrophale Folgen für dein Fenster haben dürfte.
|
Re: Wo muss die WNDProc eingebunden werden?
Ok, aber eine Frage hab ich noch:
Wenn Windows zB. eine WM_MOUSEMOVE-Botschaft schickt. Wie kann ich diese abfangen? Steht sie in Msg.wParam oder Msg.lParam oder woanders? |
Re: Wo muss die WNDProc eingebunden werden?
Moin Chris,
schau Dir dazu doch mal die Felder von TMessage an, und, ggf. noch ein paar beliebige Messages und deren Parameter. |
Re: Wo muss die WNDProc eingebunden werden?
Sie steht in msg.Msg. im wParam bzw lParam stehen Nachrichten spezifische Informationen:
![]() |
Re: Wo muss die WNDProc eingebunden werden?
Ok, dass hat mir geholfen... Danke :-D
|
Re: Wo muss die WNDProc eingebunden werden?
Eine andere Möglichkeit
Delphi-Quellcode:
type
TMyMessage = packed record // statt TMessage dwMsg, reserved : Cardinal; cStr : PChar; end; const MY_MESSAGE = WM_USER + 1974; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private procedure MyMessage(var msg : TMyMessage); message MY_MESSAGE; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyMessage(var msg: TMyMessage); begin Showmessage(msg.cStr); inherited; // optional: ruft den Message DefaultHandler auf und der ruft WndProc end; procedure TForm1.Button1Click(Sender: TObject); var Text: String; begin Text := 'Hello world'; SendMessage(Handle, MY_MESSAGE, 0, Integer(PChar(Text))); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 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