如何添加自定义菜单到菜单栏的程序菜单(右键点程序图标的菜单)中?
一般应用程序启动后,就会在Windows的菜单栏用添加一个标志应用程序的区域(该区域一般为程序图标加程序标题),而该区域点击右键时弹出一菜单(该菜单一般内容为“移动、大小、最小化、最大化、关闭”等菜单项),请问如何在该菜单在添加菜单项???一般程序都会在那里添加“关于”的菜单项的! 问题点数:100、回复次数:15Top
1 楼root3646(游牧人(虫子))回复于 2003-08-04 01:28:49 得分 5
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;
自己研究一下把。有系统菜单句柄什么都好办Top
2 楼ljmanage(过客)回复于 2003-08-04 07:54:02 得分 25
unit Unit_AddSystemMenu;
interface
uses
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.Top
3 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2003-08-04 08:41:04 得分 5
upTop
4 楼FrameSniper(http://naoku.net/blogs/framesniper/)回复于 2003-08-04 08:48:14 得分 0
可以结帖子了Top
5 楼engine_(engine)回复于 2003-08-04 09:30:48 得分 0
大家不要误会,以上方法只是添加系统菜单,即用右键点击窗口左上角小图标时所弹出的菜单,而我是想添加菜单到用右键点击Windows菜单栏中的程序图标(程序运行后在Windows菜单栏出现的程序标图和程序标题)时所弹出来的那条菜单。Top
6 楼engine_(engine)回复于 2003-08-04 16:06:17 得分 0
有人能帮帮我吗?就你CHM帮助文件的浏览器一样!Top
7 楼engine_(engine)回复于 2003-08-04 21:27:53 得分 0
有人能帮帮我吗?就像CHM帮助文件的浏览器程序一样!
Top
8 楼ljmanage(过客)回复于 2003-08-04 22:39:43 得分 0
我给你的那个就是啊,你执行一下看看好了Top
9 楼engine_(engine)回复于 2003-08-05 15:34:23 得分 0
楼上的大哥,我就是试过你的程序不行,你的程序只有在程序的左上角右键菜单有“加入系统菜单”的菜单,而在菜单栏那里就没有?为什么的?能上传一个成功的例子到风上吗?
或者把源码Email给我!
Email:engine_file@hotmail.comTop
10 楼geyobing(大地精灵)回复于 2003-08-05 17:17:41 得分 5
关注
Top
11 楼movingboy2(海蓝)回复于 2003-08-05 22:54:23 得分 0
把ljmanage(过客) 的代码中的
hMenu := GetSystemMenu(Handle,False);
改成
hMenu := GetSystemMenu(Application.Handle,False);
就行了Top
12 楼engine_(engine)回复于 2003-08-06 09:32:21 得分 0
行了行了,感谢movingboy2(movingboy2)!我学Delphi只是十天多点,原谅我啊~!我只是头小鸟而尔!Top
13 楼engine_(engine)回复于 2003-08-06 09:43:43 得分 0
现在问题是如何响应该菜单的事件?按照过客响应TWMMenuSelect消息无反应,即是不行。Top
14 楼movingboy2(海蓝)回复于 2003-08-06 10:54:16 得分 60
interface
type
TForm1 = class(TForm)
private
procedure FAppOnMsg(var Msg: TMsg; var Handled: Boolean);
end;
implementation
const
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:代码给你了,但希望你不仅仅是解决问题,而是学到为什么能解决问题,
理解它的思路与技巧Top
15 楼engine_(engine)回复于 2003-08-06 16:04:26 得分 0
唔,问题决解了!我明白啦,我也知道编程一定要多思考的!Top




