如何添加自定义菜单到菜单栏的程序菜单(右键点程序图标的菜单)中? 一般应用程序启动后,就会在Windows的菜单栏用添加一个标志应用程序的区域(该区域一般为程序图标加程序标题),而该区域点击右键时弹出一菜单(该菜单一般内容为“移动、大小、最小化、最大化、关闭”等菜单项),请问如何在该菜单在添加菜单项???一般程序都会在那里添加“关于”的菜单项的! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var mnuSys:HMENU;begin mnuSys:=getSystemMenu(handle,false); DeleteMenu(mnuSys,SC_SIZE,MF_BYCOMMAND); DELETEMENU(mnuSys,SC_MAXIMIZE,MF_BYCOMMAND); insertMenu(mnuSys,$FFFFFFFF,MF_SEPARATOR,$FFFFFFFF,''); //插入‘ABOUT’菜单 insertMenu(mnuSys,$FFFFFFFF,MF_BYCOMMAND,MF_POPUP,'关于(&A)..'); //修改菜单文本 ModifyMenu(mnuSys,SC_MINIMIZE,MF_STRING,SC_MINIMIZE,'修改的');end;自己研究一下把。有系统菜单句柄什么都好办 unit Unit_AddSystemMenu;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } Procedure user_SysMenu(Var Msg: TWMMenuSelect);Message WM_SYSCOMMAND; public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.user_SysMenu(var Msg: TWMMenuSelect);begin if Msg.IDItem=100 then Showmessage('响应系统菜单!') else Inherited; //作缺省处理,必须调用这一过程end;procedure TForm1.FormCreate(Sender: TObject);Var hMenu: integer;begin hMenu := GetSystemMenu(Handle,False); //获取系统菜单句柄 AppendMenu(hMenu,MF_SEPARATOR,0,nil); AppendMenu(hMenu,MF_STRING,100,'加入系统菜单'); //加入用户菜单end;end. 大家不要误会,以上方法只是添加系统菜单,即用右键点击窗口左上角小图标时所弹出的菜单,而我是想添加菜单到用右键点击Windows菜单栏中的程序图标(程序运行后在Windows菜单栏出现的程序标图和程序标题)时所弹出来的那条菜单。 有人能帮帮我吗?就你CHM帮助文件的浏览器一样! 有人能帮帮我吗?就像CHM帮助文件的浏览器程序一样! 楼上的大哥,我就是试过你的程序不行,你的程序只有在程序的左上角右键菜单有“加入系统菜单”的菜单,而在菜单栏那里就没有?为什么的?能上传一个成功的例子到风上吗?或者把源码Email给我!Email:[email protected] 把ljmanage(过客) 的代码中的hMenu := GetSystemMenu(Handle,False);改成hMenu := GetSystemMenu(Application.Handle,False);就行了 行了行了,感谢movingboy2(movingboy2)!我学Delphi只是十天多点,原谅我啊~!我只是头小鸟而尔! 现在问题是如何响应该菜单的事件?按照过客响应TWMMenuSelect消息无反应,即是不行。 interfacetype TForm1 = class(TForm) private procedure FAppOnMsg(var Msg: TMsg; var Handled: Boolean); end;implementationconst MY_MESSAGE_ID: Cardinal = 100;procedure TForm1.YourProcedure; //你在这里挂菜单begin ... AppendMenu(hMenu,MF_STRING,MY_MESSAGE_ID,'加入系统菜单'); Application.OnMessage := FAppOnMsg; ...end;procedure TForm1.FAppOnMsg(var Msg: TMsg; var Handled: Boolean);begin if (Msg.message = WM_SYSCOMMAND) and (Msg.wParam and $FFF0 = MY_MESSAGE_ID) then begin //捕获到消息了,做你想做的事 Handled := true; end;end;PS:代码给你了,但希望你不仅仅是解决问题,而是学到为什么能解决问题,理解它的思路与技巧 delphi 当ese按下时timer1变为不可用 用过Raise的高手请看过来 请问如何将 自增字段 返回给客户端 大家来拿高分!!!!!!!!!! 帮我一下 关于股票软件的键盘精灵! 我如何能得到image1.canvas的背景颜色? manboo以前解答的关于创建不则则窗体的程序有一个警告,大家都没发现吗?有人能改正吗 请问在发邮件的时候怎么检查邮件地址真假!有无正确的发到! 如何让combobox一获得焦点就显示下拉框?? 大家以后互相帮助好吗?都留一下自己的QQ!我的QQ:58645810 请问--什么软件里内带有interbase???
mnuSys:HMENU;begin
mnuSys:=getSystemMenu(handle,false); DeleteMenu(mnuSys,SC_SIZE,MF_BYCOMMAND);
DELETEMENU(mnuSys,SC_MAXIMIZE,MF_BYCOMMAND);
insertMenu(mnuSys,$FFFFFFFF,MF_SEPARATOR,$FFFFFFFF,'');
//插入‘ABOUT’菜单
insertMenu(mnuSys,$FFFFFFFF,MF_BYCOMMAND,MF_POPUP,'关于(&A)..'); //修改菜单文本
ModifyMenu(mnuSys,SC_MINIMIZE,MF_STRING,SC_MINIMIZE,'修改的');
end;
自己研究一下把。有系统菜单句柄什么都好办
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Procedure user_SysMenu(Var Msg: TWMMenuSelect);Message WM_SYSCOMMAND;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.user_SysMenu(var Msg: TWMMenuSelect);
begin
if Msg.IDItem=100 then
Showmessage('响应系统菜单!')
else
Inherited; //作缺省处理,必须调用这一过程
end;procedure TForm1.FormCreate(Sender: TObject);
Var
hMenu: integer;
begin
hMenu := GetSystemMenu(Handle,False);
//获取系统菜单句柄
AppendMenu(hMenu,MF_SEPARATOR,0,nil);
AppendMenu(hMenu,MF_STRING,100,'加入系统菜单');
//加入用户菜单
end;end.
或者把源码Email给我!
Email:[email protected]
TForm1 = class(TForm)
private
procedure FAppOnMsg(var Msg: TMsg; var Handled: Boolean);
end;implementationconst
MY_MESSAGE_ID: Cardinal = 100;procedure TForm1.YourProcedure; //你在这里挂菜单
begin
...
AppendMenu(hMenu,MF_STRING,MY_MESSAGE_ID,'加入系统菜单');
Application.OnMessage := FAppOnMsg;
...
end;procedure TForm1.FAppOnMsg(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message = WM_SYSCOMMAND) and
(Msg.wParam and $FFF0 = MY_MESSAGE_ID) then
begin
//捕获到消息了,做你想做的事
Handled := true;
end;
end;PS:代码给你了,但希望你不仅仅是解决问题,而是学到为什么能解决问题,
理解它的思路与技巧