gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:21:52 29 4
gpt4 key购买 nike

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

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

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

步骤:

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

    {$IFDEF 项目1}
    {$R MaskingProj1.dfm}
    {$其他}
    {$R MaskingProj2.dfm}
    {$ENDIF}

  • 还在 Masking.pas 中,使用 {$IFDEF PROJECT1} 条件定义来编译 TCheckBox 控件以及 Project2 的关联代码。

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

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

我做错了什么?是否可以通过这种方式更改 {$R *.dfm} 以使 .pas 文件根据条件定义使用不同的表单文件?

最佳答案

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

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

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

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

关于delphi - 根据条件定义包含不同的表单 (.dfm) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49215504/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com