TMainMenu构建菜单项动态

Del*_*man 2 delphi menu menuitem

在我的系统上,主菜单是完全动态的,是根据数据库中的数据构建的.

我有一个特定的情况,在显示之前需要组装一些菜单项.

我们假设我的菜单包含以下主要项目:

文件 - 客户 - 报告 - 关于

单击" 报告"菜单项时,必须在项目显示之前组合这些项目.

我对TMainMenu,TMenu和TMenuItem类中的代码进行了分析.不幸的是,我还没有找到解决问题的简单方法.

在显示之前是否存在创建这些项目的方法?

Dal*_*kar 6

你可以使用一个技巧.您需要TMenuItemReports下添加一个虚拟对象并将其Visible属性设置为False.然后将OnClick事件添加到Reports项目并在那里执行填充逻辑.在添加新项目之前,您必须删除现有项目,但是应该保留虚拟项目.

就像是:

procedure TForm1.ReportItemClick(Sender: TObject);
var
  Item: TMenuItem;
  I: Integer;
begin
  // Delete all items but first - dummy - one
  for I := ReportItem.Count - 1 downto 1 do
    ReportItem.Items[I].Free;

  Item := TMenuItem.Create(ReportItem);
  Item.Caption := 'abc';
//  Item.OnClick := ...
//  or
//  Item.Action := ...
  ReportItem.Add(Item);

  Item := TMenuItem.Create(ReportItem);
  Item.Caption := '123';
//  Item.OnClick := ...
//  or
//  Item.Action := ...
  ReportItem.Add(Item);
end;
Run Code Online (Sandbox Code Playgroud)