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