【问题标题】:Frame inheritance and duplicate files in packages包中的框架继承和重复文件
【发布时间】:2026-02-23 02:25:02
【问题描述】:

我一直在使用 TFrames 和 ModelMaker 开发许多组件——我发现视觉设计/开发 + 继承 + ModelMaker 的组合非常引人注目。然后我注册这些带有注册单元的 TFrame 后代,它们从那里成为成熟的基于调色板的组件。我正在使用 Delphi 2007。

在我了解这个过程的小“障碍”的早期,我发现 TFrame 后代流不正确(通常在 IDE 中显示为表单,而不是帧)可能会遇到一些问题,这可能完全是通过引入我自己的“TBaseFrame”类来消除,该类继承自 TFrame 而没有更改,然后使用 THAT 作为基类来开发组件(添加方法、属性等)。如果我将属性和方法等添加到直接从 TFrame 继承的类/框架中,dfm 文件流式传输经常会感到困惑。

所以,一旦我解决了问题,总体来说效果很好。

不过,昨天我遇到了一个新问题:

我将生成的组件安装在包集中,以有意义的方式进行分组(即,应用 1 的所有“面板”都在一个包中,应用 2 的许多“查看器”在另一个包中,等等)。

如果包中不包含 TBaseFrame 类,则继承的 TFrame-descendant 组件将不会加载到 IDE 中。但是,如果我将 TBaseFrame 添加到包中,当它在多个包中具有相同的源 PAS 文件时,我会遇到 Delphi 报告的冲突。

可以将我所有基于 frame=的组件放入一个巨大的包中,但我真的非常不想这样做,因为我可以清楚地看到它会变得太大/失控随着时间的推移,考虑到我计划开发多少套的性质。有没有其他方法可以解决这个冲突?


更新——有一个技巧可以让它“正常”工作——一定要阅读下面的 cmets。

【问题讨论】:

    标签: delphi ide packages custom-component tframe


    【解决方案1】:

    您是否尝试将您的 TBaseFrame 放在一个单独的包中,所有其他包都“需要”该包?

    【讨论】:

    • 虽然我以为我昨天尝试了一种与此非常相似的方法,但今天它似乎成功了。感谢您的帖子,如果我因此在 TFrame 到组件的过程中发现另一个“怪癖”,我将更新原始问题。再次感谢。
    • 更新:这修复了需要文件的编译问题,但没有解决设计时表单加载问题。但是,可以手动加载 TBaseFrame 文件(我是通过 Ctrl-Click 完成的),而不是作为包/项目的一部分,然后关闭/重新打开后代 TFrame,然后它将在 IDE 中以可视方式加载。 /跨度>