Delphi 5组件会自动将"db.pas"单元添加到uses子句中吗?

zig*_*zig 5 delphi delphi-5 toolsapi

我正在编写自己的组件,我希望它"db"interface使用子句时将其添加到表单中,因为它有一个已发布的事件,如:

TMyDBEvent = procedure(Sender: TObject; DataSet: TDataSet) of object;
Run Code Online (Sandbox Code Playgroud)

TDataSet声明db.pas,我需要手动添加此单位,我想避免.

我见过这个解决方案:

将组件添加到表单时,如何自动添加Delphi单元?

还有这个:

我可以制作一个自定义Delphi组件,将多个单元添加到uses子句中吗?

这个用途RegisterSelectionEditor,但Delphi 5(我知道......)似乎没有这个单元.

我有什么选择?

Dis*_*ned 2

您可以使用相同的名称为组件单元内的类型设置别名:

type
  TDataSet = Db.TDataSet;
Run Code Online (Sandbox Code Playgroud)

每当您将组件放到表单上时,Delphi 都应将其单元添加到 use 子句中。那么无论您是否以Db这种形式使用,都有TDataSet一个与 中的有效等效的形式Db

这种类型别名可能有任何副作用/影响/冲突问题吗?

从语言的角度来看,没有

一般来说,使用相同名称的类型是不明智的,因为当两段代码(有时甚至在同一单元内)似乎使用相同的类型,但它们内部实际上是不同的类型时,这可能会导致问题。然而,在这种情况下,类型实际上是相同

从 IDE 的角度来看,没有太多

  • 一个小问题是 IDE 中的“查找声明”需要额外的步骤才能到达基础类型。
  • 另一个问题与代码完成相关。我的经验是,当<unit-name>.<type-name>使用这种稍微不寻常的引用技术时,Delphi 的某些版本有时会在代码完成方面遇到困难。(我不记得 Delphi 5 是如何(或者是否)受到影响的。)

还有其他已知的组件使用这个技巧吗?

我不知道有任何组件使用该技术。但我在很多场合出于各种原因使用了别名。主要是为了避免强制对客户端单元产生连锁依赖。