【问题标题】:Can I make a custom Delphi component add multiple units to the uses clause?我可以让自定义 Delphi 组件向使用子句添加多个单元吗?
【发布时间】:2012-12-29 05:24:03
【问题描述】:

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

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

有谁知道这是否可以做到?

【问题讨论】:

    标签: delphi components


    【解决方案1】:

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

    Indy 10TIdTCPServerTIdCmdTCPClientTIdUDPServer 组件正是这样做的,以确保将IdContextIdSocketHandle 单元添加到uses 子句中。查看 IdCoreSelectionEditors.pasIdRegisterCore.pas 单元,了解 Indy 是如何实现这一点的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 2021-04-11
      • 1970-01-01
      • 2022-01-06
      • 2017-07-08
      • 1970-01-01
      相关资源
      最近更新 更多