【问题标题】:Lots of menuitems in delphi/lazarus德尔福/拉撒路有很多菜单项
【发布时间】:2015-07-19 06:59:54
【问题描述】:

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

设计这个的好方法是什么?我的想法是,如果我想更改/添加/删除项目,通过 IDE 插入每个菜单项很麻烦而且不是很友好,而且它们有很多..

【问题讨论】:

  • 您可以在 DFM 文件中手动添加/编辑/删除菜单项
  • @Krom - 由于每个菜单项都连接到某个文本对象(模板),我想也许对项目使用类会更好,但我不知道如何有效地做到这一点。也可能文本模板可以以某种方式创建为常量字符串。
  • 您特别提到在运行时不会发生任何变化。所以很难看出什么会使 dfm 的直接编辑效率低下。 (如果你甚至需要走那么远。)菜单已经是相当基本的结构。你不能用它们做那么多,而设计师已经很高效了。也许如果我们对您如何使用文本模板有更好的了解,您的担忧可能会更有意义。
  • 好的,如果我理解正确的话:您的菜单可以由一组名称-值对表示;其中 name 代表一个标题,而 value 是一个文本块?除此之外,您希望您的菜单采用分层结构吗?可能是多层次的? ......如果是这样,并且有足够的理由证明这一点:我可能会将数据存储在一个简单的外部文件中。清楚地识别具有层次结构信息的菜单项:例如:#Menu: L1 Caption|L2 Caption|Leaf Caption,后跟其模板的文本。 您可以将文件作为资源嵌入到您的应用中,并且非常容易编辑。
  • 根据文件动态构建菜单应该相当简单。

标签: algorithm delphi lazarus


【解决方案1】:

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

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

编辑

最近我尝试在 linux 上编译它,但没有成功……而且它似乎太“窗口化”了。所以这里是更新的版本:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多