【问题标题】:multiple dialogs inside one dfm一个dfm中的多个对话框
【发布时间】:2015-06-09 21:00:58
【问题描述】:

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

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

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

有没有办法在合并 .dfm 文件的同时让 IDE 的设计器照常工作?

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

【问题讨论】:

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


    【解决方案1】:

    现在我想对生成和合并的文件进行概述,例如多个小对话框的 .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 资源。如果您的对话框内容真的如您所说的那么小,那么您的可执行文件的开销应该是最小的。

    【讨论】:

    • 感谢您的清晰解释!我可能会动态创建它们,所以我不会得到例如对于 5 个较小的对话框,还有 15 个
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多