一般应用程序启动后,就会在Windows的菜单栏用添加一个标志应用程序的区域(该区域一般为程序图标加程序标题),而该区域点击右键时弹出一菜单(该菜单一般内容为“移动、大小、最小化、最大化、关闭”等菜单项),请问如何在该菜单在添加菜单项???一般程序都会在那里添加“关于”的菜单项的!

解决方案 »

  1.   

    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;
    自己研究一下把。有系统菜单句柄什么都好办
      

  2.   

    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.
      

  3.   

    大家不要误会,以上方法只是添加系统菜单,即用右键点击窗口左上角小图标时所弹出的菜单,而我是想添加菜单到用右键点击Windows菜单栏中的程序图标(程序运行后在Windows菜单栏出现的程序标图和程序标题)时所弹出来的那条菜单。
      

  4.   

    有人能帮帮我吗?就你CHM帮助文件的浏览器一样!
      

  5.   

    有人能帮帮我吗?就像CHM帮助文件的浏览器程序一样!
      

  6.   

    楼上的大哥,我就是试过你的程序不行,你的程序只有在程序的左上角右键菜单有“加入系统菜单”的菜单,而在菜单栏那里就没有?为什么的?能上传一个成功的例子到风上吗?
    或者把源码Email给我!
    Email:[email protected]
      

  7.   

    把ljmanage(过客) 的代码中的hMenu := GetSystemMenu(Handle,False);改成hMenu := GetSystemMenu(Application.Handle,False);就行了
      

  8.   

    行了行了,感谢movingboy2(movingboy2)!我学Delphi只是十天多点,原谅我啊~!我只是头小鸟而尔!
      

  9.   

    现在问题是如何响应该菜单的事件?按照过客响应TWMMenuSelect消息无反应,即是不行。
      

  10.   

    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:代码给你了,但希望你不仅仅是解决问题,而是学到为什么能解决问题,
    理解它的思路与技巧