我的一个组件有一个奇怪的情况:当组件放在表单时,我无法让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会自动将register
和RegisterSelectionEditor
单元添加到源文件的interface uses子句中。然而,它没有:
GIT.Dialogs
。GIT.Dialogs.Interfaces
,其中包含内部使用但未在任何地方注册的其他GIT.Dialogs.Interfaces
个后代。GIT.Dialogs.FileDialog.Base
单元(来自VCL),则不会添加TComponent
单元。 如何解决这种情况?添加Dialogs
单元并不是一个大问题,因为无论何时组件都会被链接起来如果使用了GIT.Dialogs
文件,则需要手动修复删除或使用该组件的每个表单。
答案 0 :(得分:1)
完全指定默认的VCL单位,即Dialogs
应指定为Vcl.Dialogs
。在表单上删除此类组件时,这不仅会解决此特定问题,而且还有助于消除other problems。习惯使用完全合格的单位名称。
对于现有表单,没有其他方法可以重写其单元子句。多文档搜索和替换工具可以很方便。