一个dfm内有多个对话框

时间:2015-06-09 21:00:58

标签: c++ vcl c++builder-xe2

我正在开发一个包含许多小型自定义对话框的应用程序。

这些对话框例如是提供选择,显示图表或提供其他接口。大多数情况下,它们只需要非常少的标记代码并且几乎没有子元素。

目前我正在使用embarcadero'c XE2 RAD Studio的C ++ Builder,它与VCL一起使用,并为每个表单生成.dfm文件,.h文件和.cpp文件。 现在我想对所生成的文件进行概述并合并,例如多个小对话框的.dfm文件。 (甚至可能是.cpp和.h)。 但是,我也想使用C ++ - Builder的VCL设计器。

有没有办法合并.dfm文件并且让IDE的设计师像往常一样工作?

或者我应该在运行时动态生成这些对话框吗?

2 个答案:

答案 0 :(得分:2)

  

现在我想对所生成的文件进行概述并合并,例如多个小对话框的.dfm文件。 (甚至可能是.cpp和.h)。但是,我也想使用C ++ - Builder的VCL设计器。

     

有没有办法合并.dfm文件并且让IDE的设计师像往常一样工作?

有可能(但不推荐)将设计时生成的事件处理程序实现从一个.cpp文件移动到另一个.cpp文件(不要在.h文件中移动它们的声明)。所以可以设想1 .cpp文件包含所有事件处理程序实现,应用程序将正常工作。我在其中一个项目中做了相反的事情 - 我有一个TForm,上面有很多事件处理程序,所以我将它们移动到按功能分组的单独的.cpp文件中(是​​的,我应该使用TFrame管理这个,但我不能在发展的这个阶段改变它。)

但是有一个副作用 - 如果你试图双击Object Inspector中指定的事件,如果你移动它,它将无法找到处理程序的实现代码。

但是,对于DFM,在设计时创建的每个TFormTFrameTDataModule类必须拥有自己的DFM。 IDE和DFM流媒体系统都期望这样。最终可执行文件中的DFM资源由类名标识,并且DFM流系统在将DFM加载到单个根对象实例时从头到尾读取整个DFM资源。此外,DFM数据格式不支持单个资源流中的多个DFM。

所以不,你不能将多个DFM合并在一起。

  

或者我应该在运行时动态生成这些对话框吗?

是。或者只是让对话框使用单独的DFM资源。如果您的对话框的内容确实与您说的一样小,那么可执行文件的开销应该很小。

答案 1 :(得分:0)

你可以使用" legasy" TNotebook组件(" Win3.1" RAD2007中的页面)模拟一个文件中的许多小对话框;它就像没有标签按钮的页面控制一样。在组件中创建所需数量的页面,并在表单的构造函数中激活所需的页面。