Delphi 中Perform使用WM_SYSCOMMAND

本文详细介绍了 Windows 系统中 WM_SYSCOMMAND 消息的使用方法,通过具体示例展示了如何利用该消息实现窗口操作如移动、调整大小等功能,并提供了多种命令的具体参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数有三个原型,只列举一个:
Perform(Msg: Cardinal; WParam: WPARAM; LParam: LPARAM): LRESULT; overload;
其中Msg用WM_SYSCOMMAND
WParam用SC_SIZE OR 9
LParam用0
就可以实现已生成组件的拖动。

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND,SC_SIZE OR 9,0);
end;
很神奇吧,可见windows消息的强大,下面把WM_SYSCOMMAND消息命令整理一下:
 
SC_CLOSE 关闭窗口 
SC_HOTKEY Activate the window associated with the application-specified hot key. 
SC_HSCROLL Scroll horizontally. 
SC_KEYMENU Retrieve a menu through a keystroke. 
SC_MAXIMIZE 最大化窗口
SC_MINIMIZE 最小化窗口. 
SC_MOUSEMENU Retrieve a menu through a mouse click. 
SC_MOVE Move the window. 
SC_NEXTWINDOW Move to the next window. 
SC_PREVWINDOW Move to the previous window. 
SC_RESTORE Save the previous coordinates (checkpoint). 
SC_SCREENSAVE 激活屏幕保护程序. 
SC_SIZE Size the window. 
SC_TASKLIST 激活开始菜单. 
SC_VSCROLL Scroll vertically. 
SC_MONITORPOWER 关闭显示器(LPARAM为非0参数)
SC_SEPARATOR 
SC_CONTEXTHELP 显示帮助
SC_DEFAULT
SC_SIZE = $F000
SC_MOVE = $F010
SC_MINIMIZE = $F020
SC_MAXIMIZE = $F030
SC_NEXTWINDOW = $F040
SC_PREVWINDOW = $F050
SC_CLOSE = $F060
SC_VSCROLL = $F070
SC_HSCROLL = $F080
SC_MOUSEMENU = $F090
SC_KEYMENU = $F100
SC_ARRANGE = $F110
SC_RESTORE = $F120
SC_TASKLIST = $F130
SC_SCREENSAVE = $F140
SC_HOTKEY = $F150
SC_DEFAULT = $F160
SC_MONITORPOWER = $F170
SC_CONTEXTHELP = $F180
SC_SEPARATOR = $F00F
有的时候我们看到一些这里没有的命令,比如用鼠标拖动控件时用的panel1.Perform(WM_SYSCOMMAND, $F012, 0);这个$F012这个命令在定义里没有,其实它是SC_MOVE or 2的结果,微软的文档中提到WM_SYSCOMMAND命令中wParam的值的低4位值是保留的。
举例说明:
在Form的MouseDown事件里写如下代码
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_SIZE OR 1, 0); // Left
Perform(WM_SYSCOMMAND, SC_SIZE OR 2, 0); // Right
Perform(WM_SYSCOMMAND, SC_SIZE OR 3, 0); // Top
Perform(WM_SYSCOMMAND, SC_SIZE OR 4, 0); // left-top
Perform(WM_SYSCOMMAND, SC_SIZE OR 5, 0); // Right-top
Perform(WM_SYSCOMMAND, SC_SIZE OR 6, 0); // bottom
Perform(WM_SYSCOMMAND, SC_SIZE OR 7, 0); // left-bottom
Perform(WM_SYSCOMMAND, SC_SIZE OR 8, 0); // right-bottom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蚂蚁_CrkRes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值