delphi – 根据条件定义包含不同的表单(.dfm)文件

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

最初从Project1克隆了Project2以使新机器正常运行,但现在我正在重构代码,因此可以在两个项目之间共享表单和单元以减少开发工作.有条件定义,如{$IFDEF PROJ1},在需要时使用.

我们有一个表单在项目之间几乎相同,除了一个TCheckBox,它在Project1中而不是Project2.让我们将这个窗体称为单元文件Masking.pas(和Masking.dfm).

脚步:

>将.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的相关代码.

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

这一切看起来都很好……除了当我尝试在IDE中查看表单时,通过在表单和单元之间切换(F12),不会显示任何内容.我可以手动编辑.dfm文件,重新编译后更改会反映在应用程序中……但IDE不会显示该表单.

我究竟做错了什么?是否可以以这种方式更改{$R * .dfm}以使.pas文件使用不同的表单文件,具体取决于条件定义?

解决方法

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

创建一个包含两个项目所需的所有控件的公共祖先表单.现在为Project1继承此表单并添加仅为Project1所需的控件.然后为Project2做同样的事情(可能没有在这里添加的控件).

两个项目都包含公共表单,但每个项目仅包含适用于所述项目的继承表单.

虽然你可以在这里省略Project2的继承表单,但为了清楚起见,我建议这样做.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...