Delphi 11无法注册自定义组件,安装包时报错问题咨询
Delphi 11 自定义TShape子类组件无法注册解决方案
问题原因
该问题不属于组件注册规则调整,是Delphi 11 Alexandria版本自带的IDE已知bug,仅触发于直接继承FMX.Objects.TShape类的自定义组件安装场景。
可行解决方案
以下方案均可正常完成组件注册,不影响组件运行时功能:
- 方案1:添加平台特性标记(最简便)
在自定义组件类的声明上方添加ComponentPlatformsAttribute特性,明确指定组件支持的平台,修改后重新编译安装组件包即可,修改后的组件类代码示例如下:type [ComponentPlatformsAttribute(pidAllPlatforms)] TMyComp = class(TShape) end; - 方案2:精简组件包编译目标
如果你仅需要在Windows环境下使用该组件,可打开组件包的项目配置,将编译目标仅保留Win32平台,取消其他所有平台的编译配置,重新编译安装即可正常注册。该bug的核心触发原因是IDE在处理多平台组件包的元数据时,对TShape子类的校验逻辑异常。 - 方案3:间接继承封装(兼容性最好)
如果前两种方案不符合你的开发需求,可以调整组件的继承逻辑:改为继承自TControl,在组件内部实例化一个TShape作为子控件,转发所有需要公开的属性、方法和事件。该方式完全规避了该bug的触发条件,可兼容所有Delphi版本。
内容的提问来源于stack exchange,提问作者Ole Mortensen
相关产品推荐
相关产品推荐

