我们为两个稍有不同的计算机版本提供两个版本的软件。两台机器上使用的硬件差异很大,我们需要维护两个项目Project1和Project2。在两个项目之间共享某些代码(.pas和.dfm,视情况而定),但是大多数代码当前对于Project1或Project2是唯一的。
Project2最初是从Project1中克隆出来的,以使新机器正常运行,但现在我正在重组代码,以便可以在两个项目之间使表格和单元通用,以减少开发工作。如{$IFDEF PROJ1}
中所述,在需要时使用条件定义。
除了项目1中的一个TCheckBox而不是Project2中的一个TCheckBox之外,我们在项目之间具有几乎相同的一种形式。让我们使用单位文件Masking.pas(和Masking.dfm)将此形式称为Masking
。
脚步:
将.pas和.dfm从Project1移到公用共享文件夹中
将Masking.dfm重命名为MaskingProj1.dfm
将Project2中的Masking.dfm复制到公用共享文件夹中,并重命名为MaskingProj2.dfm
手动编辑每个项目的项目(.dpr)文件以反映更改
在Masking.pas中,将{$R *.dfm}
更改为:{$IFDEF PROJECT1} {$R MaskingProj1.dfm}{$ELSE} {$R MaskingProj2.dfm}{$ENDIF}
同样在Masking.pas中,使用{$IFDEF PROJECT1}
条件定义编译出TCheckBox控件和Project2的关联代码。
最后,重新打开两个项目并重新编译。嘿!有用。现在,Project1使用Masking.pas和MaskingProj1.dfm。 Project2使用Masking.pas和MaskingProj2.dfm。
这一切似乎都可以正常工作...除了当我尝试在IDE中查看表单时,通过在表单和单位(F12)之间进行切换,什么都没有显示。我可以手动编辑任何一个.dfm文件,并且更改在重新编译后会反映在应用程序中……但是IDE不会显示该表单。
我究竟做错了什么?是否可以通过这种方式更改{$R *.dfm}
,以使.pas文件使用其他表单文件(取决于条件定义)?
最佳答案
这是表单继承的典型情况。
创建一个公共祖先表单,其中包含两个项目所需的所有控件。现在,为Project1继承此表单,并添加仅Project1所需的控件。然后对Project2执行相同操作(可能在此处没有添加控件)。
两个项目都包含通用形式,但是每个项目仅包含适合于该项目的继承形式。
尽管您可以在此处省略Project2的继承形式,但为了清晰起见,我建议您这样做。