【问题标题】:How do I change a VCL unit in Delphi (XE2)?如何在 Delphi (XE2) 中更改 VCL 单元?
【发布时间】:2014-07-21 11:52:31
【问题描述】:

我在 Delphi VCL 单元 Grids.pas 中找到了一个 bug (QC#25702) 的解决方法,因此我将该文件复制到我的项目的源文件夹中,将其添加到项目中并更改了几行代码。那是在 Delphi 2007 中,一切都按预期工作。

现在,使用 Delphi XE2,项目不再编译。它抱怨不兼容的类型“TCustomGrid”和“TdzVirtualStringGrid”(它是 TCustomGrid 的后代)。事实证明,一个单元引用了我在 Grids.pas 副本中声明的 TCustomGrid,另一个单元引用了 Vcl.Grids.pas 中声明的 TCustomGrid。即使两个单元在它们的使用子句中都有“网格”(而不是 Vcl.Grids),也会发生这种情况。知道如何解决这个问题吗?

【问题讨论】:

  • 您描述的过程已知有效。很明显,一些具体的细节出了差错。有些具体是不正确的。我们只能猜测那可能是什么。是否存在过期的 dcu 文件?或者,也许您将 D2007 Grids(带有模组)添加到 XE2 项目中。尝试进行一些调试以查找特定的环境问题。
  • 我正要使用 XE2 中的 Vcl.Grids 单元重复该过程(将其放在不同的子目录中,以便仅包含项目的 XE2 版本)。事实证明,该错误显然已在 XE2 中修复,因此我只是从项目中删除了 Grids 单元,将 Delphi 2007 文件移动到子目录中,并将其仅包含在项目的 Delphi 2007 版本中。
  • 不幸的是,这仍然不能解释为什么在同一个项目中显然使用了两个单元。删除所有 dcu 文件并没有帮助,但因为我现在只在 Delphi 2007 中使用修改后的单元,所以错误消失了。那么,我该如何结束这个问题呢?它没有真正得到回答,但不再相关。

标签: delphi vcl


【解决方案1】:

您的问题是您在 XE2 项目中包含了 Delphi 2007 Grids 单元。那根本行不通。以这种方式修改 RTL/VCL 单元需要做的事情如下:

  1. 从您使用的 Delphi 版本提供的单元的源代码开始。在这种情况下,从 XE2 提供的 Vcl.Grids.pas 开始。
  2. 在您的项目目录中复制该单元,并将该单元添加到您的项目中。
  3. 对复制单元的实现部分进行任何修改。

【讨论】:

  • 其实可以的。我刚刚不小心将用于 Delphi 2007 版本的子目录中的 Grids.pas 文件添加到 XE2 版本的项目中。编译的 XE2 项目在该单元中只有几个警告。警告是唯一告诉我我的错误的东西。
  • D2007 版本可以编译,但运行时无法正常工作。
  • FWIW,由于不允许您以该名称分发该单元,因此我会亲自更改该单元的名称,甚至更改使用的类的名称。只是为了避免升级后的混乱。 David 是对的:使用 D2007 单元不是一个好主意,尤其是因为它是一个 pre-Unicode 单元。
  • @RudyVelthuis 你不能更改名称,因为这样这个技巧根本不起作用
  • 我通常安装新命名的组件并使用它而不是原始组件(名称)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2012-03-06
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多