首先,恢复它原来的系统菜单。用修改菜单的办法让它为我所用。 下面以修改一个菜单项为例: 在窗体的private处声明: const ItemID=100; 在Form的Create事件里,使用下面语句: begin ModifyMenu(GetSystemMenu(handle,false),1,MF_BYPOSITION,ItemID,'修改的菜单项');end;下面写一个函数处理点击该菜单项的事件: 在Form的private里加一个过程: procedure MsgHandle(var msg:TMsg;var handled:boolean); 然后实现它:procedure TForm1.MsgHandle(var msg:TMsg;var handled:boolean); begin handled:=false; if (msg.message=wm_syscommand) and (msg.wparam=ItemID) then begin //做你想做的事响应该菜单的点击事件。 handled:=true; end; end;最后在你的Form的Create事件里加上: Application.OnMessage:=Form1.MsgHandle;运行即可。
在你的窗体的mousedown事件里写如下代码: var h:HMENU; p:TPoint; begin if button=mbright then begin p.x:=X; p.y:=Y; p:=clienttoscreen(p); h:=GetSystemMenu(handle,false); TrackPopupMenuEx(h,TPM_VERTICAL,p.x,p.y,handle,nil); end; end; ————别告诉你要的又不是这个,否则,我
下面以修改一个菜单项为例:
在窗体的private处声明:
const
ItemID=100;
在Form的Create事件里,使用下面语句:
begin
ModifyMenu(GetSystemMenu(handle,false),1,MF_BYPOSITION,ItemID,'修改的菜单项');end;下面写一个函数处理点击该菜单项的事件:
在Form的private里加一个过程:
procedure MsgHandle(var msg:TMsg;var handled:boolean);
然后实现它:procedure TForm1.MsgHandle(var msg:TMsg;var handled:boolean);
begin
handled:=false;
if (msg.message=wm_syscommand) and (msg.wparam=ItemID) then
begin
//做你想做的事响应该菜单的点击事件。
handled:=true;
end;
end;最后在你的Form的Create事件里加上:
Application.OnMessage:=Form1.MsgHandle;运行即可。
哈哈,不过我还是很感谢你!
var
h:HMENU;
p:TPoint;
begin
if button=mbright then
begin
p.x:=X;
p.y:=Y;
p:=clienttoscreen(p);
h:=GetSystemMenu(handle,false);
TrackPopupMenuEx(h,TPM_VERTICAL,p.x,p.y,handle,nil);
end;
end;
————别告诉你要的又不是这个,否则,我
非常感谢你!我试过了,就是这样,但是我有个问题,他产生了这个菜单,而我如何增加每个菜单项的click事件,因为现在Click任何一个菜单项都没有反应!
[email protected]
350568分数先给你了!