我们为两个略有不同版本的机器生产两个版本的软件。两台机器上使用的硬件完全不同,我们维护了两个项目Project1和Project2。某些代码(.pas和.dfm,视情况而定)在两个项目之间共享,但大多数代码目前对Project1或Project2都是唯一的。
最初从Project1克隆了Project2以使新机器正常运行,但现在我正在重构代码,因此可以在两个项目之间共享表单和单元以减少开发工作。如{$IFDEF PROJ1}
中所述,在必要时使用条件定义。
我们有一个表单在项目之间几乎相同,除了一个TCheckBox,它在Project1但不是Project2。让我们将这个表单Masking
称为单元文件Masking.pas(和Masking.dfm)。
步骤:
在Masking.pas中,将{$R *.dfm}
更改为:
{$IFDEF PROJECT1}
{$R MaskingProj1.dfm}
{$ELSE}
{$R MaskingProj2.dfm}
{$ENDIF}
同样在Masking.pas中,使用{$IFDEF PROJECT1}
条件定义来编译TC2ckBox控件和Project2的相关代码。
最后,重新打开两个项目并重新编译。嘿presto!有用。现在Project1使用Masking.pas和MaskingProj1.dfm。 Project2使用Masking.pas和MaskingProj2.dfm。
这一切看起来都很好......除了当我尝试在IDE中查看表单时,通过在表单和单元之间切换(F12),不会显示任何内容。我可以手动编辑.dfm文件,重新编译后更改会反映在应用程序中......但是IDE不会显示表单。
我做错了什么?是否可以以这种方式更改{$R *.dfm}
以使.pas文件使用不同的表单文件,具体取决于条件定义?
答案 0 :(得分:6)
这是表单继承的典型案例。
创建一个包含两个项目所需的所有控件的公共祖先表单。现在为Project1继承此表单并添加仅为Project1所需的控件。然后为Project2做同样的事情(可能没有在这里添加的控件)。
两个项目都包含公共表单,但每个项目仅包含适合所述项目的继承表单。
虽然你可以在这里省略Project2的继承表单,但为了清楚起见,我建议这样做。