通过调用Windows API函数GetSystemMenu获取窗口系统菜单的句柄,再结合AppendMenu和DeleteMenu函数,可在Delphi中实现对系统菜单项的动态添加与删除操作,从而自定义窗口的系统菜单内容,提升程序界面的灵活性和用户交互体验。
1、 启动Delphi7,新建工程,系统自动创建的窗体默认名称为Form1。
2、 在Form1的对象检查器中,切换到事件选项卡,双击OnCreate事件以生成相应的处理方法,该方法会在窗体创建时自动执行。
3、 在OnCreate函数内插入相应代码段。
4、 var
5、 添加菜单项:在指定位置插入一个文本为我建的系统菜单(E)的菜单,关联标识符1001。
6、 阐述一下:
7、 参数详解
8、 hWnd:目标窗口的句柄,用于获取其系统菜单句柄。
9、 是否恢复原始菜单设置。
10、 返回一个类型为HMENU的菜单句柄。
11、 第一个参数是当前窗口的句柄,也就是Form1的句柄。
12、 保留原菜单,不作任何修改。
13、 获取窗口系统菜单句柄h后,调用appendmenu方法添加菜单项。
14、 参数详情
15、 hMenu:通过GetSystemMenu函数获取的系统菜单句柄。
16、 若uFlag包含mf_string常数,则lpnewitem参数所指向的内容为一个字符串。
17、 新菜单项的标识符。
18、 菜单类型由lpNewItem参数指定。
19、 通过appendmenu方法,先插入一条分割线,随后添加一个ID为1001的菜单项,名称为我建的系统菜单(&E)。
20、 按F9运行程序,在系统标题处右键单击,弹出的菜单末尾即为新增选项。
21、 在TForm1类的private部分为新增系统菜单项添加点击事件响应方法
22、 该函数接收菜单选择类型作为参数。
23、 将鼠标光标移至函数声明处,按下Ctrl+Shift+C即可生成函数体,随后在其中编写所需代码。
24、 当消息的IDItem等于1001时,显示提示你选择了自己添加的菜单!,否则执行继承的默认操作。该逻辑用于判断用户是否点击了自定义菜单项,并作出相应响应。
25、 按F9启动程序,右键点击系统标题栏,从弹出菜单中选择末尾新增选项,即可显示对话框。
26、 返回Form1窗体,向其中添加一个按钮控件。
27、 双击新添加的按钮Button1,进入其单击事件处理函数Button1Click(Sender: TObject);在函数体内编写相应的执行代码。
28、 var
29、 说明一下:
30、 首先获取Form1窗体的系统菜单句柄。
31、 hMenu 长整型,表示菜单的句柄
32、 nPosition为长整型,表示待删除菜单项的标识。若wFlags中包含MF_BYCOMMAND标志,则该参数指明目标菜单项的命令ID。
33、 长整型参数wFlags,可取值为MF_BYPOSITION或MF_BYCOMMAND。
34、 新增菜单默认采用MF_BYCOMMAND方式,其唯一标识为1001,因此最终参数设置为MF_BYCOMMAND。
35、 运行F9启动程序,点击Button1后,再查看系统菜单,会发现之前添加的菜单项已消失。
评论
更多评论