2009-05-05 69 views
2

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

所以我想这个子菜单在运行时变化。所有地方都坚持在数据库中。我认为子菜单在actionmanager中应该还是有行动的。

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

有3个地方应该改变。

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

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

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

Regards

回答

3

在运行时添加或删除操作有点向后。您创建一个新的TContainedAction,然后将其ActionList属性设置为您的列表。要从列表中删除它,可以设置ActionList:= ,或者。免费操作。

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

您可以通过检查actnlist.pas中的来源获取更多信息。这不是那么庞大和完整; D2009版本只有1162行。