Perform、SendMessage 会直接发送消息到窗体过程;
PostMessage 是把消息放入消息队列.
因为 Application.OnMessage 只接收队列中的消息,
所以 Perform、SendMessage 发送的消息, OnMessage 收不到.
{通过 ApplicationEvents1.OnMessage 接受鼠标双击窗体的消息; 可以双击窗体一试}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_LBUTTONDBLCLK then
begin
ShowMessage('WM_LBUTTONDBLCLK');
Handled := True;
end;
end;
{通过 Perform 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button1Click(Sender: TObject);
begin
Self.Perform(WM_LBUTTONDBLCLK, 0, 0);
end;
{通过 SendMessage 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button2Click(Sender: TObject);
begin
SendMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;
{通过 PostMessage 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 可以收到}
procedure TForm1.Button3Click(Sender: TObject);
begin
PostMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;
PostMessage 是把消息放入消息队列.
因为 Application.OnMessage 只接收队列中的消息,
所以 Perform、SendMessage 发送的消息, OnMessage 收不到.
{通过 ApplicationEvents1.OnMessage 接受鼠标双击窗体的消息; 可以双击窗体一试}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.message = WM_LBUTTONDBLCLK then
begin
ShowMessage('WM_LBUTTONDBLCLK');
Handled := True;
end;
end;
{通过 Perform 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button1Click(Sender: TObject);
begin
Self.Perform(WM_LBUTTONDBLCLK, 0, 0);
end;
{通过 SendMessage 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button2Click(Sender: TObject);
begin
SendMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;
{通过 PostMessage 向窗体发送 WM_LBUTTONDBLCLK 消息; OnMessage 可以收到}
procedure TForm1.Button3Click(Sender: TObject);
begin
PostMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;