1

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

例如,这些对话框提供选择、显示图形或提供附加界面。大多数情况下,它们需要很少的标记代码并且几乎没有子元素。

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

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

还是我应该在运行时动态生成这些对话框?

4

2 回答 2

2

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

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

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

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

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

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

还是我应该在运行时动态生成这些对话框?

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

于 2015-06-10T00:37:31.433 回答
0

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

于 2015-11-17T08:54:58.220 回答