5

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

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

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

我已经看到了这个解决方案:

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

和这个:

我可以让自定义 Delphi 组件向使用子句添加多个单元吗?

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

我有哪些选择?

4

1 回答 1

2

您可以使用相同的名称为组件单元中的类型起别名:

type
  TDataSet = Db.TDataSet;

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

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

从语言的角度来看,没有

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

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

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

是否有任何其他已知组件使用此技巧?

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

于 2017-04-03T10:39:19.333 回答