1、使用 SendMessage
说明: 调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回SendMessage所包含4个参数:
1. hwnd 32位的窗口句柄窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄
2. wMsg 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量
3. wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
4. lParam 通常是一个指向内存中数据的指针。由于WParm、lParam和Pointer都是32位的,因此,它们之间可以相互转换
具体用法可以看 DELPHI中SendMessage详细资料
以下代码放在 OnMouseDown事件中,可以拖动任何具有Handle的控件。
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
2、使用 Perform
说明:perform是给自己发消息,所以同SendMessage或PostMessage的区别只在于少了第一个HWND参数。
以下代码放在 OnMouseDown或者OnMouseMove 事件中,不能指定HWND。
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F017, 0);
3、使用 POSTMESSAGE
以下代码放在OnMouseDown事件中
POSTMESSAGE(Self.Handle,WM_LBUTTONUP,0,0);
POSTMESSAGE(Self.Handle,274,61458,0);
4、截获WM_NCHITTEST消息
说明:当光标移动到窗体,或鼠标按下,释放时,都会发送WM_NCHITTEST消息。
procedure WMNCHITTEST(var Msg:TWMNCHITTEST);message WM_NCHITTEST;
procedure TForm1.WMNCHITTEST(var Msg: TWMNCHITTEST);
begin
inherited;
Msg.Result:=HTCaption;
end;