★★WM_WINDOWPOSCHANGING这个消息如何截获?
在窗体上放一个ApplicationEvents1控件,在其OnMessage事件中加上:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.message = WM_WINDOWPOSCHANGING then
begin
messagebeep(mb_ok);
end;
end;
在窗体上放一个Button1,在起OnClick事件中加上:
procedure TForm1.Button1Click(Sender: TObject);
begin
sendmessage(form1.Handle,WM_WINDOWPOSCHANGING,$00000000,$0012F6D0);
end;
我特意的在一个按钮的事件中发送WM_WINDOWPOSCHANGING这个消息,居然不能截获!!ApplicationEvents的OnMessage事件不是能截获所有的消息吗?为什么这个消息不能截获?请各位高手指导,谢谢!
在窗体上放一个ApplicationEvents1控件,在其OnMessage事件中加上:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if msg.message = WM_WINDOWPOSCHANGING then
begin
messagebeep(mb_ok);
end;
end;
在窗体上放一个Button1,在起OnClick事件中加上:
procedure TForm1.Button1Click(Sender: TObject);
begin
sendmessage(form1.Handle,WM_WINDOWPOSCHANGING,$00000000,$0012F6D0);
end;
我特意的在一个按钮的事件中发送WM_WINDOWPOSCHANGING这个消息,居然不能截获!!ApplicationEvents的OnMessage事件不是能截获所有的消息吗?为什么这个消息不能截获?请各位高手指导,谢谢!
//自定义方法
procedure TForm1.MyProce(par1:type....)Message WM_WINDOWPOSCHANGING;
方法二:
//自定义方法
procedure TForm1.MyProce(var Msg:TMessage);
begin
if Msg.wParam=WM_WINDOWPOSCHANGING then
......................
................
end;
Message WM_WINDOWPOSCHANGING;很重要
ApplicationEvents的OnMessage事件不是能截获所有的消息吗?
ApplicationEvents的OnMessage只能捕获传递给Application这个对象的消息,其它的是无能为力的。帮助里TApplicationEvents的OnMessage页的第一行已经说得很明白了。
OnMessage只能捕获进队的消息,象一般的键盘消息,鼠标消息,WM_PAINT,WM_TIMER这些消息
而你的SendMessage是直接调用窗口过程,所以OnMessage是收不到的,即使用PostMessage也不好使,因为WM_WINDOWPOSCHANGING就是进队消息,
如
if PostMessage(Handle,WM_WINDOWPOSCHANGING,$00000000,$0012F6D0) then
ShowMessage('succeed')
else
RaiseLastOSError;会弹出 "消息只能与同步操作一起使用",PostMessage不成功
WM_WINDOWPOSCHANGING就不是进队消息