多个对话框在一个dfm

multiple dialogs inside one dfm

本文关键字:一个 dfm 对话框      更新时间:2023-10-16

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

这些对话框可以提供选择、显示图形或提供额外的接口。大多数情况下,它们只需要很少的标记代码,并且有很少的子元素。

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

是否有一种方法来合并。dfm文件,仍然有IDE的设计器像往常一样工作?

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

现在我想保持一个概述的文件产生和合并,例如多个小对话框的。dfm文件。(也可能是。cpp和。h)。但是,我还想使用c++ -Builder的VCL设计器。

是否有一种方法来合并。dfm文件,仍然有IDE的设计器像往常一样工作?

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

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

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

所以不能合并多个dfm。

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

是的。或者让对话框使用单独的DFM资源。如果您的对话框的内容真的像您所说的那样小,那么您的可执行文件的开销应该是最小的。

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