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