CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何添加自定义菜单到菜单栏的程序菜单(右键点程序图标的菜单)中?

楼主engine_(engine)2003-08-04 01:03:59 在 Delphi / VCL组件开发及应用 提问

一般应用程序启动后,就会在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

相关问题

  • 如何将自定义工具栏的图标变成灰色
  • cSysTray做的托盘图标,如何右键点击后能弹出自定义的菜单
  • 如何给自定义的组件在控件栏中添加按钮图标!!
  • IE中的自定义工具栏如何实现啊,就是在IE的工具栏上面单击右键出现自定义工具栏那样的
  • 自定义文件关联图标
  • 如何自定义控件的图标?
  • 如何在ie工具栏上添加自定义的图标按钮,类似雅虎工具条
  • 如何编程给自定义类型的文件自定义图标
  • 自定义了菜单栏和工具栏,能不能把菜单栏和工具栏的右键菜单去掉啊?高手请进。
  • 自定义控件在工具栏中显示图标问题,不知道哪里错了,就是不显示指定的图标

关键词

  • 系统
  • 区域
  • 菜单
  • mnusys
  • 程序
  • 右键
  • tform1
  • 添加
  • hmenu
  • 图标

得分解答快速导航

  • 帖主:engine_
  • root3646
  • ljmanage
  • comerliang
  • geyobing
  • movingboy2

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo