【问题标题】:Dynamic menus/actions in DelphiDelphi 中的动态菜单/操作
【发布时间】:2009-05-05 20:15:55
【问题描述】:

我有一个应用程序,其中包含一个位置子菜单,每个位置都有唯一的快捷方式。到目前为止,这个子菜单是静态的,但通常需要在菜单中添加一个新位置并分配一个新的快捷方式。该应用程序有一个单元 Clientdata,其中包含一个 TActionManager,它包含按钮、菜单以及我提到的子菜单所需的操作。

所以我希望这个子菜单在运行时可以更改。所有地点都保存在数据库中。我认为子菜单应该仍然在 actionmanager 中有操作。

此外,所有操作都有一个快捷方式编辑器,因此每个用户都可以拥有自己的个人快捷方式。这些快捷方式保存在个人文件目录中的文本文件中。

有3个地方需要改。

  • 系统模块。在这里,我可以添加、编辑和删除将在子菜单中的数据库中的位置。
  • 操作管理器。它包含子菜单的所有操作。它还包含快捷方式,并且可以从文本文件加载/保存快捷方式。
  • 计划模块。它使用地点的子菜单。它应该从数据库中的位置构建子菜单并为它们分配正确的快捷方式。

我已经开始实施,但我不确定我是否走在正确的轨道上。当在数据模块中编辑地点列表时,ActionManager 中的数据保持同步很重要。我不确定如何在运行时在 ActionManager 中添加、编辑删除操作。我只在设计时这样做了。

欢迎其他 cmets 和可能的改进!

问候

【问题讨论】:

    标签: delphi


    【解决方案1】:

    在运行时添加或删除操作有点倒退。您创建一个新的 TContainedAction,然后将其 ActionList 属性设置为您的列表。要将其从列表中删除,请设置 ActionList := nil,或 .Free 该操作。

    一切都是通过行动完成的,而不是列表。您可以使用列表的 Actions 属性从列表中获取操作,如果您使用的 Delphi 版本支持 for..in 循环,则可以枚举列表。

    您可以通过查看 actnlist.pas 中的源来获取更多信息。它不是那么大和复杂。 D2009版本只有1162行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      相关资源
      最近更新 更多