You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承TDataModule派生类时FMX项目报错‘FMX datamodules not supported’求助

解决FMX中自定义TDataModule派生类可视化继承报错问题

问题背景

基于TDataModule派生了自定义类TMyDataModule,添加了专属属性与方法,同时制作了向导工具用于创建该类实例,新增属性可在对象查看器中正常查看。VCL项目中使用完全正常,但在FMX项目场景下:

  1. 通过向导创建TMyDataModule实例并保存后
  2. 尝试通过可视化继承创建其派生类时,触发报错:

Error creating form in Unit3.fmx: FMX datamodules not supported.

排查结论

IDE未识别到该自定义类间接继承自TDataModule,错误将其判定为窗体类型,生成了*.fmx文件而非DataModule对应的*.dfm文件。已排除ClassGroup伪属性及自定义类代码本身的问题,推测问题根源为向导适配不足或IDE的DataModule识别机制存在硬编码缺陷。

可行解决方案(无需手动修改生成文件)

方案1:修正向导的注册与模板配置

  1. 确保类注册类型正确:在向导的注册代码中,使用RegisterDataModuleClass而非RegisterFormClass来注册自定义DataModule类:
procedure Register;
begin
  RegisterDataModuleClass(TMyDataModule);
end;
  1. 修改模板文件的输出配置:打开向导对应的模板文件(通常为.bdstemplate格式),找到文件生成相关配置节点:
    • 将输出文件的扩展名从.fmx强制指定为.dfm
    • 确保模板中单元文件的资源引用指令为{$R *.dfm}而非{$R *.fmx}
    • 模板中类声明部分,显式指定ClassGroup属性为'FMX'(针对FMX项目):
      type
        [ClassGroup('FMX')]
        TMyDataModule = class(TDataModule)
          // ...
        end;
      

方案2:增强自定义类的IDE识别标记

在自定义TMyDataModule类的声明中,添加IDE用于识别组件类型的特殊属性,明确标记其为DataModule而非窗体:

type
  [ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDevice or pidAndroid)]
  [DesignCategory('Data')] // 标记为数据类组件
  TMyDataModule = class(TDataModule)
    // 你的属性与方法定义
  private
  public
  end;

该属性会帮助IDE正确识别组件类型,避免将其误判为窗体。

内容的提问来源于stack exchange,提问作者Maurizio Del Magno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:40:10