我正在研究XE2中的一些组件。是否可以将更多组件的单元添加到它所放置的表单的uses子句中?
实施例: 当我从我构建并安装的包中选择TCustomComponent时,CustomComponent单元被添加到表单的uses子句中。我还想添加单元GlobalConstants。
有人知道是否可以这样做吗?
答案 0 :(得分:16)
为您的组件创建一个设计时包(如果您还没有)。在该包中,创建一个实现ISelectionEditor
接口的类(最简单的方法是从TSelectionEditor
类派生),覆盖其虚拟RequiresUnits()
方法以报告您想要的任何其他单位出现在使用您的组件的任何Form / Frame / DataModule的uses
子句中。然后,让您的包Register()
函数通过调用RegisterSelectionEditor()
(除RegisterComponents()
之外)注册该类。
Indy 10对其TIdTCPServer
,TIdCmdTCPClient
和TIdUDPServer
组件执行此操作,以确保IdContext
和IdSocketHandle
单位获得添加到uses
条款。查看IdCoreSelectionEditors.pas
和IdRegisterCore.pas
单位,了解Indy如何实现此目标。
更新:2014年3月,我们从Indy 10中删除了IdCoreSelectionEditors.pas
和IdProtocolsSelectionEditors.pas
个单元。所有每个组件的SelectionEditor类都被替换为新的单个类实现在IdRegisterCore
单位本身。这个新的SelectionEditor类为所有Indy组件注册,它查找在设计时放置的任何Indy组件的所有实例,使用所有参数的数据类型的RTTI并返回任何已分配事件处理程序的值以了解哪些报告包含在uses
条款中的单位。