先Get窗体的System Menu,然后Insert一个MenuItem即可。

解决方案 »

  1.   

    GetSystemMenu(Handle);
    AppendMenu(...);要点击后显示什么东西,就
    BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_COMMAND,TMessage,yourfun);
    END_MESSAGE_MAP(TForm)  
      

  2.   

    呵呵,bladeboy(刀锋)是VC的写法。加菜单如bladeboy(刀锋)所说,不过响应就不对了,应当是WM_SYSCOMMAND。可以重载WndProc方法或用消息映射的方法:
    procedure WMSysCommand( var Msg: TWMSysCommand ); message WM_SYSCOMMAND;不是你的命令时,一定要执行原来的操作:inherited另外请注意,你选的命令标识低四位应当为0(Windows要用它),也就是必须是16的倍数。还有不能与系统设定的重复,如SC_xxxx等,可以在Windows.pas或Messages.pas中找到SC_xxxx的定义。
      

  3.   

    继续说。SC_xxxx最小值是61440($F000),你可以用比这个小的任何16倍数的值。源程序如下:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
      protected
        procedure WndProc( var Msg: TMessage ); override;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}const
      SC_ABOUT = $0100;procedure TForm1.WndProc(var Msg: TMessage);
    begin
      if (Msg.Msg=WM_SYSCOMMAND) and ((Msg.WParam and $FFF0)=SC_ABOUT) then
        Application.MessageBox( PChar(Application.Title), '我的程序好牛气!', MB_OK or MB_ICONINFORMATION )
      else
        inherited;
    end;procedure TForm1.FormShow(Sender: TObject);
    var
      hmnuSystem: HMENU;
    begin
      hmnuSystem := GetSystemMenu( Handle, False );
      AppendMenu( hmnuSystem, MF_SEPARATOR, 0, '' );
      AppendMenu( hmnuSystem, MF_ENABLED, SC_ABOUT, '关于(&A)...' );
    end;end.