如何在运行时使用IOTAComponent实现类设计时使用模式
运行时使用 IOTAComponent 的实现方法
前置说明
IOTAComponent 是 Delphi/C++ Builder 开放工具 API(OTA)中面向设计时场景的专属接口,原生仅可在 IDE 设计期环境下被调用。要在运行时复刻设计时的使用模式,仅能在 IDE 插件的运行上下文内实现,独立运行的普通应用无法直接调用该接口。
具体操作步骤
- 首先引入
ToolsAPI单元,通过全局变量BorlandIDEServices查询获取IOTAComponentFactory实例,这是运行时操作 IOTAComponent 的核心入口:var OtaCompFactory: IOTAComponentFactory; begin // 校验当前环境是否支持 OTA 服务 if not Supports(BorlandIDEServices, IOTAComponentFactory, OtaCompFactory) then Exit; // 后续操作 end; - 运行时创建组件的逻辑和设计时完全一致,调用
CreateComponent方法传入父容器、组件类、位置尺寸参数即可:OtaComponent := OtaCompFactory.CreateComponent(ParentOtaComp, TEdit.ClassName, 20, 20, 150, 24); - 组件属性读写可直接调用 IOTAComponent 自带的
GetPropValue/SetPropValue方法,无需额外引入 RTTI 单元适配,和设计时操作逻辑完全相同:OtaComponent.SetPropValue('Text', '运行时生成的输入框'); - 组件创建完成后需要调用
RootComponent方法挂载到当前窗体的根组件节点,即可和设计时生成的组件保持完全一致的生命周期、持久化逻辑:OtaCompFactory.RootComponent(OtaComponent, FormRootOtaComp);
注意事项
- 所有操作必须在 IDE 插件的执行上下文内完成,脱离 IDE 的独立程序无法获取 OTA 服务实例,无法使用该接口
- 若需要将运行时生成的组件持久化到窗体文件(dfm/fmx),额外调用
IOTAFormEditor.Save方法即可,和设计时自动保存的效果一致 - 如需监听组件属性变更事件,直接调用
IOTAComponent.AddPropertyChangeListener绑定回调即可,无需额外适配事件机制
内容的提问来源于stack exchange,提问作者Alexandre Sousa
相关产品推荐
相关产品推荐

