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