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

时间:2013-01-15 06:25:29

标签: delphi components

我正在研究XE2中的一些组件。是否可以将更多组件的单元添加到它所放置的表单的uses子句中?

实施例: 当我从我构建并安装的包中选择TCustomComponent时,CustomComponent单元被添加到表单的uses子句中。我还想添加单元GlobalConstants。

有人知道是否可以这样做吗?

1 个答案:

答案 0 :(得分:16)

为您的组件创建一个设计时包(如果您还没有)。在该包中,创建一个实现ISelectionEditor接口的类(最简单的方法是从TSelectionEditor类派生),覆盖其虚拟RequiresUnits()方法以报告您想要的任何其他单位出现在使用您的组件的任何Form / Frame / DataModule的uses子句中。然后,让您的包Register()函数通过调用RegisterSelectionEditor()(除RegisterComponents()之外)注册该类。

Indy 10对其TIdTCPServerTIdCmdTCPClientTIdUDPServer组件执行此操作,以确保IdContextIdSocketHandle单位获得添加到uses条款。查看IdCoreSelectionEditors.pasIdRegisterCore.pas单位,了解Indy如何实现此目标。

更新:2014年3月,我们从Indy 10中删除了IdCoreSelectionEditors.pasIdProtocolsSelectionEditors.pas个单元。所有每个组件的SelectionEditor类都被替换为新的单个类实现在IdRegisterCore单位本身。这个新的SelectionEditor类为所有Indy组件注册,它查找在设计时放置的任何Indy组件的所有实例,使用所有参数的数据类型的RTTI并返回任何已分配事件处理程序的值以了解哪些报告包含在uses条款中的单位。