1、打开Delphi7,创建新的工程,默认新窗体的Name属性为Form1
2、在Form1的ObjectInspector中Events里双击OnCreate为Form1创建OnCreate方法,此方法在窗体创建时调用。
3、在OnCreate方法中添加以下代码:var h: integer;begin h := getsystemmenu(handle,false); appendm髫潋啜缅enu(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第二个不修改原始菜单,保留原始菜单得了窗体系统菜单句柄h后调用了appendmenu方法。function AppendMenu(hMenu:HMENU;uFlags,uIDNewItem:UNIT;lpNewItem:Pchar):BOOL;stdcall; 参数说明: hMenu: 用GetSystemMenu函数得到的菜单句柄。 uFlag:。如果这个参数包括mf_string常数,该lpnewitem参数指向的字符串 uIDNewItem:标识符的新菜单项。 lpNewItem:菜单的类型。用这个appendmenu方法先增加了一个分割线,再添加了一个唯一标识为1001的“我建的系统菜单(&E)”菜单项
4、F9运行程序,右键系统标题位置,弹出系统菜单,最后一项就是我们刚刚添加的菜单了
5、为新添加的系统菜单增加点击响应方法,在TForm1类的private添加方法procedure sysmenu(var msg: twmmenuselect);message wm_syscommand;这个函数参数为菜单选择类型。
6、鼠标光标点到这个函数的声明,同时按住CTRL+Shift+C即可以首疏扌熘创建这个函数体,在函数体内写:beginifmsg.IDItem=1001 thenshowmessage('你选择了自己添加的菜单!')elseinherited;end;
7、F9运行程序,右键系统标题位置,弹出系统菜单,点击最后一项我们添加的菜单会弹出对话框。
8、再回到Form1窗体,为窗体添加一个Button
9、双击新添加的Button1进入Button1的点击响应函数Button1Click(Sen蟠校盯昂der: TOb枣娣空郅ject);在函数体写下: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
10、F9运行程序,点击Button1,再查看系统菜单会发现我们添加的系统菜单项已经没了。