首页 | IT新闻 | 硬件 | 操作系统 | 开发 | 网络编程 | 数据库 | 热门框架 | 网络安全 | 组网 | 建站指南 | 网页制作 | 特效 | 实用技巧 | 服务器 | 办公 | QQ | 探索 | 社区

  • 技术部落
  • 部落首页 > 程序开发 > Delphi > 正文
  • 用Delphi为窗体的系统菜单中添加选项
      2007-3-28  来源:网络资源  编辑:Jsbulo  热度:

      通常在应用程序中,如果单击标题栏的左侧图标,就会弹出一个窗体的系统菜单,在其中可以完成最小化、最大化和关闭等操作。本实例将演示如何在窗体的系统菜单中添加自己的选项。

      在窗体中添加一个TMainMenu组件,其中TMainMenu组件中的选项将要被添加到窗体的系统菜单中。添加组件后的窗体如图1所示。

      在TMainMenu组件生成的菜单中添加一个File菜单,在这个菜单下面添加一个Exit选项。

      在本程序开始运行时就会把TMainMenu组件生成的菜单添加到窗体的系统菜单中,响应代码如下:

    procedure TForm1.FormCreate(Sender: TObject);
    var
     I: Integer;
    begin
     AppendMenu (GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, ’’);
     with MainMenu1 do
     begin
      for I := 0 to Items.Count - 1 do
       AppendMenu(GetSystemMenu(self.Handle,FALSE),mf_Popup,
       Items[I].Handle,PAnsiChar(Items[I].Caption));
     end;
    end;

      程序首先通过GetSystemMenu (Handle, FALSE)来取得窗体的系统菜单,并且调用AppendMenu函数添加一个MF_SEPARATOR类型的选项,也就是菜单分隔条。然后通过一个循环,调用AppendMenu函数把TMainMenu组件生成的菜单逐个添加到窗体的系统菜单中。

      现在,虽然选项已经添加到窗体的系统菜单中,但是选项还不能够响应用户的操作。为了能够正常响应用户的操作,需要拦截WM_SysCommand消息,所以要添加拦截消息的过程——procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SysCommand,它的响应代码如下:

    procedure TForm1.WMSysCommand (var Msg: TWMSysCommand);
    var
     Item: TMenuItem;
    begin
     Item := MainMenu1.FindItem(Msg.CmdType, fkCommand);
     if Item <> nil then
      Item.Click;
      inherited;
    end;

      这样,新添加的选项就可以正常工作了。

      单击窗体系统菜单File中的Exit选项,就会结束程序的运行。

      程序代码如下:

    unit Unit1;

    interface

    uses

    SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
    Menus, StdCtrls;
    type
     TForm1 = class(TForm)
     MainMenu1: TMainMenu;
     File1: TMenuItem;
     Exit1: TMenuItem;
     procedure Exit1Click(Sender: TObject);
     procedure FormCreate(Sender: TObject);
    private
     { Private declarations }
    public
     procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SysCommand;
    end;


    var
     Form1: TForm1;
     implementation
     {$R *.DFM}

    procedure TForm1.WMSysCommand (var Msg: TWMSysCommand);
    var
     Item: TMenuItem;
    begin
     Item := MainMenu1.FindItem (Msg.CmdType, fkCommand);
     if Item <> nil then
      Item.Click;
      inherited;
     end;

    procedure TForm1.Exit1Click(Sender: TObject);
    begin
     Close;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    var
     I: Integer;
    begin
     AppendMenu (GetSystemMenu (Handle, FALSE), MF_SEPARATOR, 0, ’’);
     with MainMenu1 do
     begin
      for I := 0 to Items.Count - 1 do
       AppendMenu(GetSystemMenu(self.Handle,FALSE),mf_Popup,
       Items[I].Handle,PAnsiChar(Items[I].Caption));
      end;
     end;
    end.


      保存文件,然后按F9键运行程序,程序运行结果如图2所示。

      本实例演示的是如何向窗体的系统菜单中添加选项。取得系统选项的句柄后,不但可以添加选项,还可以修改选项,这样读者就可以在自己编写的程序中更加充分地控制窗体的系统菜单。