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

Delphi 5 component that will automatically add "db.pas" unit to uses clause?

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

TMyDBEvent = procedure(Sender: TObject; DataSet: TDataSet) of object;

TDataSet声明在db.pas,我需要手动添加这个单位,我想避免。

我看过这个解决方案:

How are Delphi units automatically added when a component is added to a form?

还有这个:

Can I make a custom Delphi component add multiple units to the uses clause?

那个用RegisterSelectionEditor,但是Delphi5(我知道。。。)好像没有这个单位。

我有哪些选择?

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

type
  TDataSet = Db.TDataSet;

无论何时将组件放在表单上,​​Delphi 都应将其单位添加到 uses 子句中。那么无论您是否以该形式使用 Db,都有一个有效的 TDataSet 等同于 Db.

中的那个

Could there be any side effects/implications/conflicts issues to such type aliasing?

从语言的角度来说,没有

通常不建议使用同名类型,因为当 2 段代码(有时甚至在同一单元内)似乎使用相同的类型,但实际上它们在内部是不同的类型时,这可能会导致问题。 但是,在这种情况下,类型实际上是 相同

从IDE的角度来看,不多

  • 一个小问题是 IDE 中的 "Find Declaration" 需要额外的步骤才能到达基础类型。
  • 另一个问题与代码完成有关。我曾经历过,当使用这种稍微不寻常的引用技术 <unit-name>.<type-name> 时,某些版本的 Delphi 偶尔会遇到代码完成问题。 (我不记得 Delphi 5 是如何(甚至是否)受到影响的。)

Are there any other known components that uses this trick?

我不知道有任何组件使用该技术。但出于各种原因,我曾多次使用别名。主要是为了避免对客户端单元造成连锁依赖。