我正在开发带有许多小型自定义对话框的应用程序。

这些对话框例如提供选择,显示图形或提供其他界面。通常,它们只需要很少的标记代码,并且子元素很少。

目前,我正在使用embarcadero'c XE2 RAD Studio的C++ Builder,该Builder与VCL配合使用,并为每种格式生成.dfm文件,.h文件和.cpp文件。
现在,我想对产生的文件进行概述并合并例如多个小对话框的.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资源。如果对话框的内容确实如您所说的那么小,则可执行文件的开销应该最小。

10-07 23:12