How to process use defined message in
forms(overriding WndProc method)
In TCustomForm class, there exists
"WndProc" method which processes window messages.
procedure
TCustomForm.WndProc(var Message: TMessage);
You can override this method to process user defined
message.
[Delphi]
unit Unit1;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;
type
TForm1 =
class(TForm)
Button1:
TButton;
procedure
Button1Click(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
procedure WndProc(var Message: TMessage); override;
end;
var
Form1:
TForm1;
implementation
{$R *.dfm}
const
WM_MY_MESSAGE = WM_USER + 10;
procedure TForm1.WndProc(var Message:
TMessage);
begin
case Message.Msg of
WM_MY_MESSAGE:
ShowMessage('WM_MY_MESSAGE');
else
inherited WndProc(Message);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Handle, WM_MY_MESSAGE, 0, 0);
end;
end.
[CBuilder]
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton
*Button1;
void
__fastcall Button1Click(TObject *Sender);
private:
// User declarations
public:
// User declarations
__fastcall
TForm1(TComponent* Owner);
public:
virtual
void __fastcall WndProc(TMessage &Message);
};
//---------------------------------------------------------------------------
#define WM_MY_MESSAGE (WM_USER + 10)
//---------------------------------------------------------------------------
void __fastcall TForm1::WndProc(TMessage
&Message)
{
switch (Message.Msg)
{
case WM_MY_MESSAGE:
ShowMessage("WM_MY_MESSAGE");
break;
default:
TForm::WndProc(Message);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
SendMessage(Handle, WM_MY_MESSAGE, 0, 0);
}
//---------------------------------------------------------------------------