包含基于条件定义的不同形式(.dfm)文件

问题描述 投票:0回答:2

我们为两个略有不同版本的机器生产两个版本的软件。两台机器上使用的硬件完全不同,因此我们维护两个项目:Project1 和 Project2。一些代码(.pas 和 .dfm,视情况而定)在两个项目之间共享,但大多数代码目前是项目 1 或项目 2 所独有的。

Project2 最初是从 Project1 克隆的,以便让新机器启动并运行,但现在我正在重组代码,以便两个项目之间可以共用表单和单元,以减少开发工作。条件定义,如

{$IFDEF PROJ1}
中所示,在需要时使用。

我们有一个在项目之间几乎相同的表单,除了一个 TCheckBox 位于 Project1 而不是 Project2 之外。让我们用单元文件 Masking.pas(和 Masking.dfm)将此表单称为

Masking

步骤:

  • 将 .pas 和 .dfm 从 Project1 移至公共共享文件夹中
  • 将 Masking.dfm 重命名为 MaskingProj1.dfm
  • 将 Masking.dfm 从 Project2 复制到公共共享文件夹中并重命名为 MaskingProj2.dfm
  • 手动编辑每个项目的项目 (.dpr) 文件以反映更改
  • 在Masking.pas中,将

    {$R *.dfm}
    更改为:

    {$IFDEF PROJECT1}
        {$R MaskingProj1.dfm}
    {$ELSE}
        {$R MaskingProj2.dfm}
    {$ENDIF}

  • 还在 Masking.pas 中,使用

    {$IFDEF PROJECT1}
    条件定义来编译 Project2 的 TCheckBox 控件和相关代码。

最后,重新打开两个项目并重新编译。嘿,快点!有用。现在,Project1 使用 Masking.pas 和 MaskingProj1.dfm。 Project2 使用 Masking.pas 和 MaskingProj2.dfm。

这一切似乎都工作正常...除了当我尝试在 IDE 中查看表单时,通过在表单和单位 (F12) 之间切换,没有显示任何内容。我可以手动编辑任一 .dfm 文件,重新编译后更改会反映在应用程序中...但 IDE 不会显示表单。

我做错了什么?是否可以通过这种方式更改

{$R *.dfm}
以使 .pas 文件根据条件定义使用不同的表单文件?

delphi delphi-7 dfm
2个回答
8
投票

这是表单继承的典型案例。

创建一个公共祖先表单,其中包含两个项目所需的所有控件。现在为 Project1 继承此窗体并添加仅 Project1 所需的控件。然后对 Project2 执行相同的操作(此处可能无需添加控件)。

两个项目都包含通用表单,但每个项目仅包含适合该项目的继承表单。

虽然您可以在此处省略 Project2 的继承形式,但为了清楚起见,我建议这样做。


0
投票

一切都非常好,我明白,对我来说这只是一个项目,我想在第三种形式中使用两个调用程序的不同设置,一次是 MDIChild 以及与之匹配的所有内容,一次作为模态,当然还有所有内容这太模态了(FormStyle、Visible、Position、BorderStyle)。 pas 文件应该完全相同。将所有内容都欺骗到 pas 文件中在视觉上并不有吸引力。这可能吗?

© www.soinside.com 2019 - 2024. All rights reserved.