Delphi:当组件放在表单上时,错误的单元添加了单元来使用源文件的子句

时间:2016-11-30 08:53:48

标签: delphi delphi-xe5

我的一个组件有一个奇怪的情况:当组件放在表单时,我无法让Delphi IDE在源代码中添加正确的单元。不仅包括错误的单位,而且在某些情况下不包括正确的单位(我试图使用inserAdjacentHTML()后代添加)。

组件应该是标准TOpenDialog / TSaveDialog组件的替代品。它们实际上是代理组件,它将基于某些全局配置实例化正确的类型(基本对话框或自定义类型)。

我已经编写了几个单元来实现所有必需的类和组件,其中一些应该包含在使用组件的任何地方:

  • innerHTML是实现TSelectionEditor后代注册的地方(以及所有实用程序和公共函数和类)
  • git.dialogs.pas包含用于与组件交互的所有接口,应包含在内以便访问依赖于实现的属性和方法

组件的注册放在名为' git.dialogs.registration.pas'的单元中。它包含一个TComponent后代,它覆盖git.dialogs.interfaces.pas方法,如下所示:

TSelectionEditor

然后使用RequiresUnits在通常的uses System.Classes, GIT.Dialogs, DesignEditors, DesignIntf; type TGITDialogSelectionEditor = class(TSelectionEditor) public procedure RequiresUnits(Proc: TGetStrProc); override; end; procedure register; begin RegisterComponents('GIT Dialogs', [GIT.Dialogs.TGITFileOpenDialogCpn, GIT.Dialogs.TGITFileSaveDialogCpn]); RegisterSelectionEditor(GIT.Dialogs.TGITFileOpenDialogCpn, TGITDialogSelectionEditor); RegisterSelectionEditor(GIT.Dialogs.TGITFileSaveDialogCpn, TGITDialogSelectionEditor); end; { TGITDialogSelectionEditor } procedure TGITDialogSelectionEditor.RequiresUnits(Proc: TGetStrProc); begin inherited; Proc('GIT.Dialogs'); Proc('GIT.Dialogs.Interfaces'); end; 程序中注册该课程。

理论上,当我在表单上删除其中一个组件时,IDE会自动将registerRegisterSelectionEditor单元添加到源文件的interface uses子句中。然而,它没有:

  • 正确添加GIT.Dialogs
  • 它添加了一个不公开单元GIT.Dialogs.Interfaces,其中包含内部使用但未在任何地方注册的其他GIT.Dialogs.Interfaces个后代。
  • 如果源文件已包含GIT.Dialogs.FileDialog.Base单元(来自VCL),则不会添加TComponent单元。

如何解决这种情况?添加Dialogs单元并不是一个大问题,因为无论何时组件都会被链接起来如果使用了GIT.Dialogs文件,则需要手动修复删除或使用该组件的每个表单。

1 个答案:

答案 0 :(得分:1)

完全指定默认的VCL单位,即Dialogs应指定为Vcl.Dialogs。在表单上删除此类组件时,这不仅会解决此特定问题,而且还有助于消除other problems。习惯使用完全合格的单位名称。

对于现有表单,没有其他方法可以重写其单元子句。多文档搜索和替换工具可以很方便。