Const
MyMove = 1000;
//自定义消息(全局)
M := GetSystemMenu(Application.Handle, false);
//获取系统菜单,M定义属性为HMENU
DeleteMenu(M, 0, MF_BYPOSITION);
//删除系统菜单中的第一菜单项
InsertMenu(M, 0, MF_ByPosition+MF_String, 1000, '还原(&R)' );
//在指定位置插入菜单项
SetMenuItemBitmaps(M, 0, MF_BYPOSITION, BMP1.Handle, BMP1.Handle);
//设置菜单项图标
EnableMenuItem(M, MyMove, MF_BYCOMMAND+MF_DISABLED+MF_GRAYED);
//使菜单项失效并灰显
EnableMenuItem(M, MyMove, MF_BYCOMMAND+MF_ENABLED);
//使菜单项恢复功能,MyMove处可以是自定义消息,也可以是系统消息,如对关闭功能的操作,可设置消息为SC_CLOSE
对系统菜单项的功能实现,可以在OnCreate事件中加入
Application.OnMessage := wmHMessages;
过程实现
Procedure Tform1.wmHMessages(var Msg : TMsg; var Handled : Boolean);
begin
if Msg.message = WM_SYSCOMMAND then
begin
if Msg.wParam = MyMove then
begin
SendMessage(Form1.Handle, WM_SYSCOMMAND, SC_MOVE, 0);
end;
end;
end;
// SC_MINIMIZE 最小化
// SC_MAXIMIZE 最大化
// SC_CLOSE 关闭
// SC_RESTORE 还原
// SC_SIZE 大小
// SC_MOVE 移动