Delphi在系統菜單中添加刪除系統菜單項

Delphi在系統菜單中添加刪除系統菜單項,利用Windows提供的API函數GetSystemMenu能夠獲得窗口的系統菜單句柄,再經過AppendMenu和DeleteMenu就能夠添加和刪除菜單了。app

工具/原料 

 
  • Delphi7
  • Windows電腦

方法/步驟

  1.  

    打開Delphi7,建立新的工程,默認新窗體的Name屬性爲Form1ide

     

  2.  

    在Form1的Object Inspector中Events裏雙擊OnCreate爲Form1建立OnCreate方法,此方法在窗體建立時調用。函數

     

  3.  

    在OnCreate方法中添加如下代碼:工具

    varspa

      h: integer;3d

    beginorm

      h := getsystemmenu(handle,false);blog

      appendmenu(h,mf_separator,0,nil);  ci

      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便可以建立這個函數體,在函數體內寫:

    begin  if msg.IDItem = 1001 then    showmessage('你選擇了本身添加的菜單!')  else    inherited;end;

     

  7.  

    F9運行程序,右鍵系統標題位置,彈出系統菜單,點擊最後一項咱們添加的菜單會彈出對話框。

     

  8.  

    再回到Form1窗體,爲窗體添加一個Button

     

  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

     

  10.  

    F9運行程序,點擊Button1,再查看系統菜單會發現咱們添加的系統菜單項已經沒了。

     

    END