delphi/lazarus 中有很多菜单项

Lots of menuitems in delphi/lazarus

我有一个应用程序,我在其中使用了很多分层菜单项,每个菜单项都有一个与之关联的文本模板。一切都是在设计时制作的,因此菜单项和文本模板是不变的。在应用程序上,选择Menuitem时,将相关的文本模板插入综合控制中。

设计这个的好方法是什么?我的想法是,如果我想要 change/add/remove 项,通过 IDE 插入每个菜单项很麻烦而且不是很友好,而且它们有很多..

为了完整起见,这是我最终做的(作为完整答案):

  1. 创建了一个文本文件,其中包含要插入的文本项的模板,没有特定的顺序。我可以添加到此文件,而无需过多考虑稍后显示菜单时的顺序和逻辑。
  2. 写了一个 python 脚本,它接受这个原始文件并创建一个资源文件,在上面 @Craig 评论的行中,该资源文件与子菜单和菜单项一起排序。可选地,它可以创建一个 D/LFM 文件以在编译时加载。
  3. 包含 .res 文件并在启动时编写一个小函数来动态创建菜单(或者可选择只包含 D/LFM 文件)。

编辑

最近我试图在 linux 上编译它,它没有工作......而且它看起来太“windowy”了。所以这里是更新版本:

  1. 同上1。
  2. 写了一个 python 脚本,它接受这个文件并构建一个单元,其中包含一个集合和许多与文本项对应的集合项。该单元还具有在运行时填充集合的功能和使用集合项构建运行时菜单的功能。
  3. 当程序启动时,首先会用所有集合项填充集合。
  4. 每次打开新编辑器 window 时,“插入文本”菜单都会从集合中动态构建。

此算法在 windows 和 linux 上运行良好,干净且易于实现,而且不会弄乱 D/LFM 文件,它是纯代码。