我有一个框架:
TfrmMyFrame = class(TFrame)
...
end;
它放在我的主表格上,如下所示:
interface
uses Myframe;
type
TfrmMyMainForm = class(TForm)
FmyFrm: TfrmMyFrame;
...
end;
在设计时,我无法打开主窗体,除非我在设计器中打开框架。我总是必须先打开框架窗体,然后才能打开主窗体。请注意,我只是在谈论设计时间。这是正确的行为吗?如果没有,我该如何纠正它?我正在使用 XE5。
框架必须包含在项目中,设计人员才能将它们添加到窗体中或在窗体上显示它们。它们仍然可以在运行时动态添加到窗体中。
如果您检查表单的 dfm,您会注意到使用单词 inline
添加的框架。这由 VCL 组件流式处理系统转换为枚举值TComponentState.csInline
,用于指示组件是可以嵌入到窗体中的顶级容器。
窗体设计器使用与运行时相同的组件流系统。我的猜测是它只解析当前加载到 IDE 内部缓存中的表单和框架。这将解释为什么如果您先打开框架,则可以打开窗体。通过将框架添加到项目中,当在 IDE 中打开项目时,该框架将加载到缓存中。
有趣的事实
IDE扩展程序员使用了一个技巧来设计继承自
TDockForm
的表单,这是一个开放工具API 仅在预编译二进制包中提供的组件(否 源,没有DFM(。通过在假人中实现假TDockForm
与后代属于同一项目组的项目 IDE可能会被愚弄加载假货。这个技巧依赖于相同的 您偶然发现的行为。