delphi - TMainMenu 动态构建菜单项

标签 delphi menu menuitem

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

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

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

文件 - 客户 - 报告 - 关于

当我点击 Reports 菜单项时,必须先组合这些项目才能显示。

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

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

最佳答案

您可以使用一个技巧。您需要在 Reports 下添加一个虚拟的 TMenuItem 并将其 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;

关于delphi - TMainMenu 动态构建菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35060054/

相关文章:

delphi - 以编程方式关闭 TrayIcon 气球

delphi - 泛型和 Marshal/UnMarshal。我在这里缺少什么?

Android 4.3 菜单项 showAsAction ="always"被忽略

reactjs - react-hook-form material-ui 下拉字段缺少 `name` 属性 :

Delphi TIdTCPServer 处理多个请求

sql-server - 将 600MB 文件作为文件流数据插入 SQL Server Express 时出现内存不足错误

jquery - li菜单需要 "selected"的类

CSS圆 Angular 问题

c# - InputBinding 和 WebBrowser 控件

c# - 悬停菜单项时更改背景颜色但无法在wpf中显示子菜单