2012-06-28 19 views
4

我试图从一个数据模块在Delphi XE2复制和粘贴部件到另一个。该组件是一个Fast Report数据源链接组件。数据模块是全新的,仅在XE2中创建。Delphi XE2中的TDataModule.ClassGroup伪属性真的在做什么?

别人有同样的问题,报告说,它在quality central as 106369和同样的错误信息导致我这个mysterious DocWiki entry.

所以数据模块现在有一个框架的亲和力,并根据文档一个设计时,只有伪属性, :

“因为ClassGroup伪属性仅由IDE使用,并且不是编译器生成的属性(因此,'pseudo-property'),所以ClassGroup没有记录在编译器生成的Libraries Reference中。您正在阅读的是ClassGroup的文档。“

因此,我第一次了解到这种情况的存在是,它阻止我从现有的一组designtime构建块中复制和粘贴组件到我的数据模块中,而这些构件块并不希望从头开始重新构建。

一旦我改变数据模块的亲和力,我可以粘贴到的东西的数据模块没有它烦我。感谢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或窗口上的依赖项”?

更新1:您的数据模块存储的.PAS源代码在看起来有点像一个编译器指令,这样的方式这种伪属性:

implementation 

{%CLASSGROUP 'Vcl.Controls.TControl'} 
+0

沃伦,这是一个怎样的问题,任何人都在SO能回答?它需要提交给EMBT,唯一的方法就是通过QC或通过Delphi论坛中的文档论坛。投票结束为“非建设性”,因为这不是一个可回答的问题,而是一个讨论请求。 –

+0

@KenWhite,Remy Lebeau刚刚做到了。 :) –

+0

那么这是无法回答的(你的意见)或明显的(雷米),或者可能有更多在这里,我们可以从德尔福的使用中找出(我的理由)。如果可以的话,请投票结束,或者回答。 –

回答

8

我觉得这是很明显的是什么它的目的用途是,并且你链接到的文档对于这个目的来说非常广泛。它旨在防止仅将VCL组件放置在FireMonkey可访问的DataModule上,反之亦然。由于TDataModule最初是框架中立的,因此只能将与框架无关的组件置于其上。所以很明显,你的源DataModule的比你的新DataModule的,这就是为什么复制/粘贴不工作,直到您更改新DataModule中的亲和力,以匹配源DataModule中的亲和力不同的亲和力。