“在 Unit 中创建表单时出错...fmx:不支持 FMX 数据模块。”当从 TDataModule 后代类继承时

问题描述 投票:0回答:1

我有一个问题(示例项目)。

我有一个 TDataModule 派生类,我向其中添加了一些属性和方法。

我想确保可以使用类似于 TDataModules 的向导创建此类的新实例,并且可以查看我在对象检查器中添加的属性。

所以我创建了向导,一切正常。 当在 FMX 项目中(如果该项目是 VCL 一切都很好)中,我添加这个新类的新实例(使用向导)然后我尝试从此继承另一个新的派生类(视觉形式继承)时,就会出现问题),我收到以下错误:“在 Unit3.fmx 中创建表单时出错:不支持 FMX 数据模块。”

经过大量测试和研究(并打扰了很多朋友),我得出的结论是,IDE 无法识别您正在(间接)继承 TDataModule,并且表现得就像您正在继承一个新表单一样,事实上它试图创建文件 *.fmx 而不是 *.dfm,这通常是 DataModule 的情况,即使项目是 FireMonkey。

我已经验证了伪属性“ClassGroup”决定了 DataModule 与 VCL 或 FMX 的“亲和力”与此问题无关,并且我的类中的代码也不是从 TDataModule 派生的,因此我相信只有两种可能:

  1. 我的向导不适合在FMX项目中创建TDataModule(衍生),但使用向导本身创建实例效果很好,在VCL项目中甚至继承也没有问题

  2. Delphi 的 IDE 必须区分您是创建 Form 还是 DataModule,这种“机制”对于从 TDataModule 派生的类存在一些问题,就好像识别它是 DataModule 是“硬编码的”。

因此,我询问任何可以帮助我的人,如果您知道不手动编辑生成的文件的解决方案或解决方法(我已经这样做了)。

我创建了一个最小的项目,从中删除了所有多余的东西,但配有向导,它允许您验证问题,也许还可以研究一下。

您可以在这里下载:github.com/mauriziodm/MyDataModule.git

像这样进行:

  1. 打开“MyDataModuleDT.dproj”项目,进行构建,然后单击“Install”在 IDE 中安装生成的包(向导)。
  2. 在Delphi的“工具”中添加源文件所在路径。
  3. 创建一个新的 FMX 项目并将其保存在某处
  4. 将新的 TMyDataModule 添加到项目中(文件 > 新建 > 其他 > MyDM > MyDataMule)并保存
  5. 继承步骤4中添加的MyDataModule(文件>新建>其他>可继承项目>MyDataModule2(或您选择的名称)),出现错误。

经过大量测试和研究(并打扰了很多朋友),我得出的结论是,IDE 无法识别您正在(间接)继承 TDataModule,并且表现得就像您正在继承一个新表单一样,事实上它试图创建文件 *.fmx 而不是 *.dfm,这通常是 DataModule 的情况,即使项目是 FireMonkey。

我已经验证了伪属性“ClassGroup”决定了 DataModule 与 VCL 或 FMX 的“亲和力”与此问题无关,并且我的类中的代码也不是从 TDataModule 派生的,因此我相信只有两种可能:

exception delphi inheritance ide datamodule
1个回答
0
投票

我通知您,由于 Claudio Piffer 的贡献,问题已得到解决。

Claudio 尝试修改“GetAncestorName”方法,使其返回“DataModule”值,通过这种方式,他向 IDE 告知这样一个事实:尽管是间接的(在我的实际情况中)该类是一个 DataModule,并且一切似乎都正常。

尽管在我的实际情况中,该类不是直接从 TDataModule 派生的,但它似乎运行良好,不会影响其他任何内容。

我曾尝试做同样的事情,但只是修改一个常量的值,以及在指示的方法中,也在其他地方使用,然后在其他地方产生问题,而不是永久返回该值而不修改其他地方的任何其他内容很好。

现在,在我的实际情况下,方法是这样的:在此处输入图像描述

© www.soinside.com 2019 - 2024. All rights reserved.