在我的系统上,主菜单是完全动态的,是根据数据库中的数据构建的。
我有一个特定的情况,一些菜单项需要在显示之前组装。
假设我的菜单包含以下主要项目:
文件 - 客户 - 报告 - 关于
当我点击 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/