Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

少年乘勇气,百战过乌孙。这篇文章主要讲述Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项相关的知识,希望能为你提供帮助。
Delphi在系统菜单中添加删除系统菜单项Delphi在系统菜单中添加删除系统菜单项,利用Windows提供的API函数GetSystemMenu可以得到窗口的系统菜单句柄,再通过AppendMenu和DeleteMenu就可以添加和删除菜单了。
工具/原料   

  • Delphi7
  • Windows电脑
方法/步骤
  1.   打开Delphi7,创建新的工程,默认新窗体的Name属性为Form1
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  2.   在Form1的Object  Inspector中Events里双击OnCreate为Form1创建OnCreate方法,此方法在窗体创建时调用。
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  3.   在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)”菜单项
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  4.   F9运行程序,右键系统标题位置,弹出系统菜单,最后一项就是我们刚刚添加的菜单了
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  5.   为新添加的系统菜单增加点击响应方法,在TForm1类的private添加方法
    procedure sysmenu(var msg: twmmenuselect); message wm_syscommand;  
    这个函数参数为菜单选择类型。
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  6.   鼠标光标点到这个函数的声明,同时按住CTRL+Shift+C即可以创建这个函数体,在函数体内写:
    begin    if  msg.IDItem  =  1001 then        showmessage(\'你选择了自己添加的菜单!\')    else        inherited; end;
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  7.   F9运行程序,右键系统标题位置,弹出系统菜单,点击最后一项我们添加的菜单会弹出对话框。
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  8.   再回到Form1窗体,为窗体添加一个Button
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  9.   双击新添加的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
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
     
  10.   F9运行程序,点击Button1,再查看系统菜单会发现我们添加的系统菜单项已经没了。
     
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片
    Delphi通过AppendMenu和DeleteMenu在系统菜单中添加删除菜单项

    文章图片

    END
注释
Delphi在系统菜单中添加删除系统菜单项,Delhi在系统菜单中添加删除系统菜单项,利用Widow提供的API函数GetSytemMeu可以得到窗口的系统菜单句柄,再通过AedMeu和DeleteMeu就可以添加和删除菜单了。


    推荐阅读