【问题标题】:What does TDataModule.ClassGroup pseudo-property in Delphi XE2 really do?Delphi XE2 中的 TDataModule.ClassGroup 伪属性究竟做了什么?
【发布时间】:2012-06-30 06:58:25
【问题描述】:

我试图在 Delphi XE2 中将一个组件从一个数据模块复制并粘贴到另一个数据模块中。该组件是一个快速报告数据源链接组件。数据模块是全新的,刚刚在 XE2 中创建。

其他人遇到了同样的问题并在quality central as 106369 上报告了它,同样的错误消息将我带到了这个mysterious DocWiki entry.

因此,数据模块现在具有框架亲和性,以及仅设计时的伪属性,根据文档:

“因为 ClassGroup 伪属性仅由 IDE 使用,而不是编译器生成的属性(因此,'伪属性'),ClassGroup 没有记录在编译器生成的库参考中。您所在的页面阅读是 ClassGroup 的文档。”

所以,我什至第一次知道它的存在是当它阻止我从一组现有的设计时构建块中复制和粘贴组件到我的数据模块中时,我不想从头开始重建。

一旦我更改了数据模块的关联性,我就可以将内容粘贴到数据模块中而不会打扰我。谢天谢地,Google 出现了错误,否则我会被卡住。

如果它旨在帮助我们编写跨平台数据模块,但它只影响 IDE,根据文档,这与您在设计时使用它时收到的警告不一致,这是您收到的错误如果你改变它:

 EInvalidType : The following component(s) are not available in the specified 
 class group. This is likely to cause compile or runtime errors. 
 frxDBSet.TfrxDBDataset.

我看不到错误消息如何正确,文档也可以正确。

如果设置不正确,警告似乎会提示编译、链接和运行时错误。好奇的人想知道到底发生了什么,想知道:这是什么东西,为什么它会被添加到 XE2 的数据模块中。我预计其他人会偶然发现这个奇怪的功能,感觉就像他们踩到了恐龙粪便之类的东西,并想知道这个功能是怎么回事。

在这一点上,我最好的答案是数据模块与 TPersistent 的亲和性,用 XE2 术语来说,这意味着该数据模块不希望其中包含 VCL 特定的非可视控件。在未来的 Delphi 版本中,也许类似的标记可以让我们也将表单标记为“清除对 VCL 或 Windows 的依赖”?

更新 1:您的数据模块的 .PAS 源代码以一种看起来有点像编译器指令的方式存储此伪属性,如下所示:

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

【问题讨论】:

  • @KenWhite,Remy Lebeau 刚刚做到了。 :)
  • 嗯,这要么是无法回答的(你的意见),要么是显而易见的(Remy),或者我们可以从 Delphi 的使用中找出更多信息(我问的原因)。如果可以的话,请投票结束,或者回答这个问题。
  • @François,不是真的。雷米重复了文档,沃伦所问的一个重要部分是“在未来的版本中......也许一个类似的标记会允许”——除非我们在 EMBT 内部有关于未来计划的信息,推测“未来的版本”是讨论,因此在这里不合适。 :-) 沃伦,正如我在 7 小时前所说的那样,我做到了——你的评论是针对我的吗?注意我没有没有投反对票;这个问题问得很好,但在这里不合适。错误(甚至是文档)属于 QC,而算命属于通灵者聚集的任何地方。 :D
  • 我认为这是一个架构问题;了解 Delphi 工具集。
  • 我想这真的很明显,正如雷米所说。

标签: delphi delphi-xe2 datamodule


【解决方案1】:

我认为这很明显是它的预期用途,并且您链接到的文档对此目的非常广泛。

这是为了防止仅 VCL 的组件被放置在 FireMonkey 可访问的 DataModule 上,反之亦然。

由于 TDataModule 最初是与框架无关的,因此只能在其上放置与框架无关的组件。

很明显,您的源 DataModule 与您的新 DataModule 具有不同的亲和性,这就是为什么在您更改新 DataModule 的亲和性以匹配源 DataModule 的亲和性之前复制/粘贴不起作用的原因。

【讨论】:

    猜你喜欢
    • 2012-07-17
    • 2012-07-23
    • 2016-09-10
    • 2023-03-15
    • 2012-10-17
    • 2021-06-04
    • 1970-01-01
    • 2018-07-30
    相关资源
    最近更新 更多