少年乘勇气,百战过乌孙。这篇文章主要讲述Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项相关的知识,希望能为你提供帮助。
Delphi在系统菜单中添加删除系统菜单项Delphi在系统菜单中添加删除系统菜单项,利用Windows提供的API函数GetSystemMenu可以得到窗口的系统菜单句柄,再通过AppendMenu和DeleteMenu就可以添加和删除菜单了。
工具/原料
- Delphi7
- Windows电脑
-
打开Delphi7,创建新的工程,默认新窗体的Name属性为Form1
文章图片
-
在Form1的Object
Inspector中Events里双击OnCreate为Form1创建OnCreate方法,此方法在窗体创建时调用。
文章图片
-
在OnCreate方法中添加以下代码:
var
h: integer;
begin
h := getsystemmenu(handle,false);
appendmenu(h,mf_separator,0,nil);
appendmenu(h,mf_string,1001,\'我建的系统菜单(& E)\');
end;
解释一下:
function GetSystemMenu(hWnd:HWND; bRevert:BOOL):HMENU; stdcall;
参数说明:
hWnd: 所要取得系统菜单句柄的目标窗口句柄。
bRevert:是否修改原始菜单。
返回一个HMENU型的菜单句柄。
第一个参数为handle即当前窗口的handle,即Form1.handle
【Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项】第二个不修改原始菜单,保留原始菜单
得了窗体系统菜单句柄h后调用了appendmenu方法。
function AppendMenu(hMenu:HMENU; uFlags,uIDNewItem:UNIT; lpNewItem:Pchar):BOOL; stdcall;
参数说明:
hMenu: 用GetSystemMenu函数得到的菜单句柄。
uFlag:。如果这个参数包括mf_string常数,该lpnewitem参数指向的字符串
uIDNewItem:标识符的新菜单项。
lpNewItem:菜单的类型。
用这个appendmenu方法先增加了一个分割线,再添加了一个唯一标识为1001的“我建的系统菜单(& E)”菜单项
文章图片
-
F9运行程序,右键系统标题位置,弹出系统菜单,最后一项就是我们刚刚添加的菜单了
文章图片
-
为新添加的系统菜单增加点击响应方法,在TForm1类的private添加方法
procedure sysmenu(var msg: twmmenuselect); message wm_syscommand;
这个函数参数为菜单选择类型。
文章图片
-
鼠标光标点到这个函数的声明,同时按住CTRL+Shift+C即可以创建这个函数体,在函数体内写:
begin if msg.IDItem = 1001 then showmessage(\'你选择了自己添加的菜单!\') else inherited; end;
文章图片
-
F9运行程序,右键系统标题位置,弹出系统菜单,点击最后一项我们添加的菜单会弹出对话框。
文章图片
-
再回到Form1窗体,为窗体添加一个Button
文章图片
-
双击新添加的Button1进入Button1的点击响应函数Button1Click(Sender: TObject);
在函数体写下:
var
i: integer;
begin
i := getsystemmenu(handle,false);
Deletemenu(i,1001,MF_BYCOMMAND);
end;
解释一下:
先获取到Form1窗体的系统菜单句柄
DeleteMenu(hMenu :HMENU; uPosition :Cardinal; uFlags :Cardinal)
hMenu Long,菜单句柄
nPosition Long,欲删除菜单条目的标识符。如在wFlags中设置了MF_BYCOMMAND标志,这个参数就代表要改变的菜单条目的命令ID。
wFlags Long,MF_BYPOSITION或MF_BYCOMMAND
我们新添加的菜单默认是MF_BYCOMMAND方式,对应的唯一标识是1001,所以最后参数是MF_BYCOMMAND
文章图片
-
F9运行程序,点击Button1,再查看系统菜单会发现我们添加的系统菜单项已经没了。
文章图片
文章图片
END
注释 |
Delphi在系统菜单中添加删除系统菜单项,Delhi在系统菜单中添加删除系统菜单项,利用Widow提供的API函数GetSytemMeu可以得到窗口的系统菜单句柄,再通过AedMeu和DeleteMeu就可以添加和删除菜单了。 |
推荐阅读
- 一种解决 MacBook 里的 App Store 无法登录的问题
- [Functional Programming] From simple implementation to Currying to Partial Application
- Ambari(Provide ability to apply single patches on top of RU release)
- 适合精致女孩使用的APP软件 不容错过的精彩人生
- AndroidCardView
- Android Programming
- Android 6.0 默认关闭定位和GPS,开启后默认选省电
- android开发注意几点
- Jupyter Notebook入门指南