我们在Delphi XE2中使用SQL Direct Version6.4 (Win7,64位,但我们只做32位的开发)。
我正在制作一个新的测试应用程序,发现了以下内容:
在工具调色板中,当我在表单上时,有10个组件可用:

工具调色板中的,当我使用数据模组时,其中只有3种是可用的

这是在一个新项目中。当我试图将TSDDatabase从另一个项目复制到新项目中的数据模时,我发现了这一点。
这告诉您,我们有(几个)其他项目包含TSDDatabase (以及数据模上的10减3中的其他组件),这些组件仍然很好地构建和运行。
实际上,我已经在写另一个问题了,这时我注意到了以下几点:
我尝试放置一个TSDDatabase的数据模包含新的
{%CLASSGROUP 'System.Classes.TPersistent'}负责组件注册的源文件从以下内容开始:
procedure Register;
begin
{$IFDEF EVAL}
ShowReminderBox;
{$ENDIF}
{$IFDEF SD_VCL10}
// Restrict these components to only be used with VCL components.
GroupDescendentsWith(TSDDatabase, Controls.TControl);
GroupDescendentsWith(TSDDataSet, Controls.TControl);
GroupDescendentsWith(TSDSession, Controls.TControl);
GroupDescendentsWith(TSDUpdateSQL, Controls.TControl);
{$ENDIF}
RegisterComponents(srSQLDirect, [TSDSession, TSDDatabase, TSDQuery, TSDMacroQuery, TSDStoredProc, TSDTable, TSDUpdateSQL, TSDScript, TSDMonitor, TSDSQLBaseServer]);
RegisterPropertyEditor(TypeInfo(Boolean), TSDDatabase, 'Connected', TSDDatabaseConnectedProperty);
RegisterPropertyEditor(TypeInfo(string), TSDDatabase, 'RemoteDatabase', TSDDatabaseProperty);
RegisterPropertyEditor(TypeInfo(string), TSDDatabase, 'SessionName', TSDSessionNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDDatabase, 'ParamsFileName', TSDFileNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDDataSet, 'DatabaseName', TSDDatabaseNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDDataSet, 'SessionName', TSDSessionNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDScript, 'DatabaseName', TSDDatabaseNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDScript, 'SessionName', TSDSessionNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDStoredProc, 'StoredProcName', TSDStoredProcNameProperty);
RegisterPropertyEditor(TypeInfo(string), TSDTable, 'TableName', TSDTableNameProperty);当我删除%CLASSGROUP语句时,问题就消失了。
显然,将后代与Controls.TControl与CLASSGROUP一起分组是原因所在。
但是,尽管查阅了%CLASSGROUP伪性质和GroupDescendentsWith,我还是不明白最后一条声明具体做了什么。
有人能更详细地解释一下这是怎么回事吗?具体而言,应该如何更改注册代码(因为我们有源代码的Pro版本,我们可以对其进行修补),以防止其他同事像我一样浪费时间?
(并且: 10减4 GroupDescendentsWith语句使6,而不是3)?
发布于 2014-04-24 13:33:05
数据模块的设计是框架无关的。这意味着,对于默认的ClassGroup,它们不能承载特定于VCL或FMX框架的组件。当您查看带有数据模块active的调色板时,删除的组件是与这两个框架之一相关联的组件。在这种情况下,VCL。
Embarcadero文档非常清楚地解释了这一点:TDataModule
GroupDescendentsWith的使用是告诉IDE特定控件是特定框架的一部分。StartClassGroup的文档说:
流系统允许可以加载和保存的类在不同的组中注册。这允许IDE区分跨平台类和只使用Windows的类.StartClassGroup创建一个新的类组,并将AClass指定的类添加到该组中。
处理此问题的最简单方法是更改数据模块上的ClassGroup伪属性。
https://stackoverflow.com/questions/23270201
复制相似问题