delphi - Delphi 中的动态菜单/操作

标签 delphi

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

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

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

有 3 个地方需要更改。

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

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

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

问候

最佳答案

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

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

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

关于delphi - Delphi 中的动态菜单/操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826733/

相关文章:

c++ - 堆积面积计算

Delphi XE2找不到ComObj.dcu它去哪儿了?

delphi - 使用临时变量改变格式化输出

delphi - 我是否需要担心分配给TList的整数值无效?

Delphi ListView OnSelectItem 触发两次

delphi - 如何动态添加面板到TCategoryPanelGroup?

regex - RegEx模式可在这些情况下限制破折号

delphi - 在delphi中将十六进制字符串转换为十进制值

delphi - IntraWeb/DataSnap?

使用 JNA 从 Delphi 进行 Java 回调导致 VM 崩溃