Delphi在系統菜單中添加刪除系統菜單項
Delphi在系統菜單中添加刪除系統菜單項,利用Windows提供的API函數GetSystemMenu能夠獲得窗口的系統菜單句柄,再經過AppendMenu和DeleteMenu就能夠添加和刪除菜單了。app
方法/步驟
-
打開Delphi7,建立新的工程,默認新窗體的Name屬性爲Form1ide
-
在Form1的Object Inspector中Events裏雙擊OnCreate爲Form1建立OnCreate方法,此方法在窗體建立時調用。函數
-
在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)」菜單項
-
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