Ответ 1
Создайте пакет времени разработки для вашего компонента (если у вас его еще нет). В этом пакете создайте класс, который реализует интерфейс ISelectionEditor
(самый простой способ - извлечь из TSelectionEditor
), переопределяя свой виртуальный метод RequiresUnits()
для сообщения любых дополнительных единиц, которые вы хотите отобразить в предложении uses
любого Form/Frame/DataModule, который использует ваш компонент. Затем, если ваша функция пакета Register()
зарегистрирует этот класс, вызвав RegisterSelectionEditor()
(в дополнение к RegisterComponents()
).
Indy 10 делает именно это для своих компонентов TIdTCPServer
, TIdCmdTCPClient
и TIdUDPServer
, чтобы убедиться, что IdContext
и IdSocketHandle
добавляются в предложения uses
. Посмотрите на единицы IdCoreSelectionEditors.pas
и IdRegisterCore.pas
, чтобы увидеть, как Indy реализует это.
Обновление: единицы измерения IdCoreSelectionEditors.pas
и IdProtocolsSelectionEditors.pas
были удалены из Indy 10 в марте 2014 года. Все классы для каждого компонента SelectionEditor были заменены новым единственным классом, реализованным в IdRegisterCore
само устройство. Этот новый класс SelectionEditor зарегистрирован для всех компонентов Indy и ищет все экземпляры любого компонента Indy, который был помещен во время разработки, с использованием RTTI типов данных всех параметров и возвращаемых значений для всех назначенных обработчиков событий, чтобы узнать, какие единиц для отчета для включения в предложение uses
.