我有一个奇怪的情况与我的一个组件:我不能让Delphi IDE在源代码中添加正确的单元时该组件被放置在表格上。不仅包括错误的单位,而且正确的单位(我试图用TSelectionEditor
后代添加)不包括在某些情况下。德尔福:错误的单元添加单元使用从源文件的子句当组件被放置在一个窗体上
组件应该是标准的TOpenDialog/TSaveDialog组件的替代品。它们实际上是代理组件,它将基于一些全局配置实例化正确的类型(基本对话框或定制的对话框)。
我已经写了几个单位在落实所有必要的类和组件,其中一些应该包括无处不在的组件用于:
git.dialogs.pas
是在TComponent
后裔注册实施(以及所有公用事业和公共函数和类)git.dialogs.interfaces.pas
包含用于与该组件进行交互和所有接口应包括为了访问实现相关的属性和方法
组件的注册被放置在一个名为'git.dialogs.registration.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;
这个类,然后在使用RegisterSelectionEditor
通常register
程序登记。
理论上,当我将这些组件中的一个放在窗体上时,IDE将自动将GIT.Dialogs
和GIT.Dialogs.Interfaces
单元添加到源文件的interface uses子句中。但它并不是:
- 它正确添加了
GIT.Dialogs.Interfaces
。 - 它增加了一个未列出的单位
GIT.Dialogs.FileDialog.Base
其中包含一些其他TComponent
后代在内部使用但未在任何地方注册。 - 如果源文件已包含
Dialogs
单元(来自VCL),则不会添加GIT.Dialogs
单元。
我该如何解决这种情况?添加GIT.Dialogs.FileDialog.Base
单元不是什么大问题,因为无论何时使用该组件都会被链接,但不添加GIT.Dialogs
文件需要手动修复该组件被放置的每个表单或用过的。
您是否试图将'Dialogs'单位指定为'Vcl.Dialogs'? – NGLN
它确实会解决问题,但我仍然需要手动调整所有现有表单。 – Stephane
您是否在项目中使用了与所需单位冲突的单位范围名称? –