当前位置: 源码素材网 » Delphi教程 » 详情页

Delphi在程序运行过程中动态添加菜单

  •   时间:2019-03-14
  • 概述:动态添加菜单

Delphi在程序运行过程中动态添加菜单,在窗体中添加一个TMainMenu组件和两个TButton组件,TMainMenu组件用来显示程序菜单,TButton组件用于完成添加菜单的操作。

编程方法:以“添加选项”按钮为例,来讲解一下在程序运行过程中动态添加选项的基本过程,响应代码:

procedure TfrmMain.btnAddItemClick(Sender: TObject);
var
    mnu:TMenuItem;
begin
    mnu:=TMenuItem.Create(self.MainMenu1);
    mnu.Caption:='打开';
    mnu.Name:='mnuOpen';
    //如果Name属性不设置,那么程序会自动分配
    mnu.OnClick:=OnMenuClick;
    mnu.AutoHotkeys:=maManual;
    mnu.AutoLineReduction:=maManual;
    self.mnuFile.Add(mnu);
end;

首先创建一个TMenuItem类型的对象mnu,设置mnu对象的Caption和Name属性后,通过语句mnu.OnClick:=OnMenuClick把自定义的OnMenuClick过程关联到mnu对象上。然后设置AutoHotkeys和AutoLineReduction属性值为maManual,通过设置这两个属性可以禁止程序自动为菜单生成热键;否则程序会自动在菜单的Caption属性中加入热键,并且会修改Caption属性的值,给通过Caption属性判断选项带来麻烦。最后通过self.mnuFile.Add(mnu)语句把新生成的选项添加到“文件”菜单中,其中mnuFile为“文件”菜单的名称。

关联到新建选项的OnMenuClick过程响应代码如下:

procedure TfrmMain.OnMenuClick(Sender:TObject);
begin
    if (Sender as TMenuItem).Name='mnuOpen' then
    begin
        ShowMessage('打开');
    end
    else if (Sender as TMenuItem).Name='mnuEdit' then
    begin
        ShowMessage('编辑');
    end
    //在这里也可以通过选项的Caption属性来判断
    //不过之前最好设置AutoHotkeys和AutoLineReduction为maManual
end;

OnMenuClick过程中只有一个参数Sender,不过通过这个Sender参数可以取得新建选项的所有参数,如Name和Caption属性等。

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;
type
  TfrmMain = class(TForm)
    MainMenu1: TMainMenu;
    mnuFile: TMenuItem;
    mnuNew: TMenuItem;
    btnAddItem: TButton;
    btnAddMenu: TButton;
    procedure btnAddItemClick(Sender: TObject);
    procedure btnAddMenuClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure OnMenuClick(Sender:TObject);
  public
    { Public declarations }
  end;
var
  frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.btnAddItemClick(Sender: TObject);
var
    mnu:TMenuItem;
begin
    mnu:=TMenuItem.Create(self.MainMenu1);
    mnu.Caption:='打开';
    mnu.Name:='mnuOpen';
    //如果Name属性未设置,那么程序会自动分配
    mnu.OnClick:=OnMenuClick;
    mnu.AutoHotkeys:=maManual;
    mnu.AutoLineReduction:=maManual;
    self.mnuFile.Add(mnu);
end;
procedure TfrmMain.OnMenuClick(Sender:TObject);
begin
    if (Sender as TMenuItem).Name='mnuOpen' then
    begin
        ShowMessage('打开');
    end
    else if (Sender as TMenuItem).Name='mnuEdit' then
    begin
        ShowMessage('编辑');
    end
    //在这里也可以通过选项的Caption属性来判断
    //之前最好设置AutoHotkeys和AutoLineReduction为maManual
end;
procedure TfrmMain.btnAddMenuClick(Sender: TObject);
var
    mnu:TMenuItem;
begin
    mnu:=TMenuItem.Create(self);
    mnu.Caption:='编辑';
    mnu.Name:='mnuEdit';
    //如果Name属性不设置,那么程序会自动分配
    mnu.OnClick:=OnMenuClick;
    mnu.AutoHotkeys:=maManual;
    mnu.AutoLineReduction:=maManual;
    self.MainMenu1.Items.Add(mnu);
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
    self.MainMenu1.AutoHotkeys:=maManual;
    self.MainMenu1.AutoLineReduction:=maManual;
    //通过设置这两个属性可以禁止程序自动为菜单生成热键
    //否则程序会自动在菜单的Caption属性中加入热键
    //并且会修改Caption属性的值,给通过Caption属性判断选项带来麻烦
end;
end.

通过这个实例,读者可以学习到如何在程序运行过程中动态添加菜单。对此程序略加扩展,读者就可以掌握如何在程序运行过程中全面控制菜单,如添加、删除或修改等,从而为程序的动态运行提供可靠的保障。

    相关声明:

      若“Delphi在程序运行过程中动态添加菜单”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。