如何能自定义系统的弹出式菜单

解决方案 »

  1.   

    1.获取系统菜单的句柄,可用API函数getsystemmenu()
    2.用 API 函 数appendmenu()向系统菜单中加入用户菜单选项了。第二个问题,需要重载WM_SYSCOMMAND或WM_MENUSELECT消 息。们
    知 道, 当从系统菜单,则会发出WM_SYSCOMMAND 消 息,重载这个消息,判断选中菜单的Id值是否为我们设定值就可以了program Psysmenu;
    uses
      Forms,
      Sysmenu in '\SYSMENU.PAS' {Form1};
    {$R *.RES}
    begin
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.unit Sysmenu;
    interface
    uses
      SysUtils, WinTypes, WinProcs, Messages, Classes, 
      Graphics, Controls,Forms, Dialogs;
    type
      TForm1 = class(TForm)
            procedure FormCreate(Sender: TObject);
      private
          procedure  user_sysmenu(var msg:twmmenuselect);
                                   message wm_syscommand;
      public
            { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.DFM}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.