无法在设计器中打开带框架的表单

时间:2015-03-20 13:35:40

标签: delphi delphi-xe5

我有一个框架:

TfrmMyFrame = class(TFrame)
  ...
end;

我的主要表格如下:

interface

uses Myframe;

type
  TfrmMyMainForm = class(TForm)
    FmyFrm: TfrmMyFrame;
    ...
  end;

在设计时我无法打开我的主表单,除非我在设计器中打开框架。在打开主表单之前,我总是要打开框架表单。请注意,我只是在谈论设计时间。这是正确的行为吗?如果没有,我该如何纠正?我正在使用XE5。

1 个答案:

答案 0 :(得分:2)

框架必须包含在项目中,供设计人员将其添加到表单或在表单上显示。它们仍然可以在运行时动态添加到表单中。

如果您检查表单的dfm,您会注意到使用单词inline添加了框架。这由VCL组件流系统转换为枚举值TComponentState.csInline,用于表示该组件是可以嵌入到表单中的顶级容器。

表单设计器使用与运行时使用的相同的组件流系统。我的猜测是它只解析当前加载到IDE内部缓存中的表单和框架。这可以解释为什么如果先打开框架就可以打开表单。通过将框架添加到项目中,当在IDE中打开项目时,它将被加载到缓存中。

  

有趣的事实

     

IDE扩展程序员使用一种技巧来设计从TDockForm继承的表单,这是一个Open Tools API   仅在预编译二进制包中提供的组件(没有   来源,没有dfm)。通过在虚拟中实现 TDockForm   项目是与后代相同的项目组的一部分   IDE可以被欺骗加载假货。这个伎俩依赖于同样的道理   你偶然发现的行为。