Delphi中的动态菜单/操作

时间:2009-05-05 20:15:56

标签: delphi

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

所以我希望这个子菜单在运行时可以变换。所有地方都保存在数据库中。我认为子菜单应该仍然在动作管理器中有动作。

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

有3个地方应该改变。

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

我已经开始实施,但我不确定我是否在正确的轨道上。在数据模块中编辑场所列表时,ActionManager中的数据同步非常重要。我不确定如何在运行时添加,编辑ActionManager中的删除操作。我只在设计时完成了这个。

欢迎提出其他意见和可能的改进!

此致

1 个答案:

答案 0 :(得分:3)

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

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

您可以通过检查actnlist.pas中的来源获取更多信息。它不是那么大而且很有成就感; D2009版只有1162行。