我有一个问题(示例项目)。
我有一个 TDataModule 派生类,我向其中添加了一些属性和方法。
我想确保可以使用类似于 TDataModules 的向导创建此类的新实例,并且可以查看我在对象检查器中添加的属性。
所以我创建了向导,一切正常。 当在 FMX 项目中(如果该项目是 VCL 一切都很好)中,我添加这个新类的新实例(使用向导)然后我尝试从此继承另一个新的派生类(视觉形式继承)时,就会出现问题),我收到以下错误:“在 Unit3.fmx 中创建表单时出错:不支持 FMX 数据模块。”
经过大量测试和研究(并打扰了很多朋友),我得出的结论是,IDE 无法识别您正在(间接)继承 TDataModule,并且表现得就像您正在继承一个新表单一样,事实上它试图创建文件 *.fmx 而不是 *.dfm,这通常是 DataModule 的情况,即使项目是 FireMonkey。
我已经验证了伪属性“ClassGroup”决定了 DataModule 与 VCL 或 FMX 的“亲和力”与此问题无关,并且我的类中的代码也不是从 TDataModule 派生的,因此我相信只有两种可能:
我的向导不适合在FMX项目中创建TDataModule(衍生),但使用向导本身创建实例效果很好,在VCL项目中甚至继承也没有问题
Delphi 的 IDE 必须区分您是创建 Form 还是 DataModule,这种“机制”对于从 TDataModule 派生的类存在一些问题,就好像识别它是 DataModule 是“硬编码的”。
因此,我询问任何可以帮助我的人,如果您知道不手动编辑生成的文件的解决方案或解决方法(我已经这样做了)。
我创建了一个最小的项目,从中删除了所有多余的东西,但配有向导,它允许您验证问题,也许还可以研究一下。
您可以在这里下载:github.com/mauriziodm/MyDataModule.git
像这样进行:
经过大量测试和研究(并打扰了很多朋友),我得出的结论是,IDE 无法识别您正在(间接)继承 TDataModule,并且表现得就像您正在继承一个新表单一样,事实上它试图创建文件 *.fmx 而不是 *.dfm,这通常是 DataModule 的情况,即使项目是 FireMonkey。
我已经验证了伪属性“ClassGroup”决定了 DataModule 与 VCL 或 FMX 的“亲和力”与此问题无关,并且我的类中的代码也不是从 TDataModule 派生的,因此我相信只有两种可能:
我通知您,由于 Claudio Piffer 的贡献,问题已得到解决。
Claudio 尝试修改“GetAncestorName”方法,使其返回“DataModule”值,通过这种方式,他向 IDE 告知这样一个事实:尽管是间接的(在我的实际情况中)该类是一个 DataModule,并且一切似乎都正常。
尽管在我的实际情况中,该类不是直接从 TDataModule 派生的,但它似乎运行良好,不会影响其他任何内容。
我曾尝试做同样的事情,但只是修改一个常量的值,以及在指示的方法中,也在其他地方使用,然后在其他地方产生问题,而不是永久返回该值而不修改其他地方的任何其他内容很好。
现在,在我的实际情况下,方法是这样的:在此处输入图像描述