Delphi XE2数据模块只需要数据库组件?

Delphi XE2数据模块只需要数据库组件?,delphi,delphi-xe2,datamodule,Delphi,Delphi Xe2,Datamodule,在Delphi的早期版本中,我使用了数据模块(TDataModule)作为保存非可视组件的位置,以避免主窗体混乱。在Delphi XE2中,当我创建一个新的数据模块时,它只允许我在其中放置与数据库相关的组件(例如TADOConnection和TDataSource)。这是为什么?我如何将其他组件放入其中?有其他选择吗?中的这种(小车)行为 unit Unit2; interface uses System.SysUtils, System.Classes; type TDataMo

在Delphi的早期版本中,我使用了数据模块(
TDataModule
)作为保存非可视组件的位置,以避免主窗体混乱。在Delphi XE2中,当我创建一个新的数据模块时,它只允许我在其中放置与数据库相关的组件(例如
TADOConnection
TDataSource
)。这是为什么?我如何将其他组件放入其中?有其他选择吗?

中的这种(小车)行为

unit Unit2;

interface

uses
  System.SysUtils, System.Classes;

type
  TDataModule2 = class(TDataModule)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  DataModule2: TDataModule2;

implementation

{%CLASSGROUP 'System.Classes.TPersistent'}

{$R *.dfm}

end.
是由线路引起的

{%CLASSGROUP 'System.Classes.TPersistent'}
要删除,只需将行删除或修改为

{.%CLASSGROUP 'System.Classes.TPersistent'}
切换到
Design
视图后,您将看到预期的所有组件


(Delphi XE2 16.0.4504.48759)

数据模块随XE2版本而更改。记住,XE2除了长期存在的VCL之外,还引入了一个新的组件框架FireMonkey。数据模块中添加了一个名为的新伪属性。这将控制哪些组件可以添加到IDE设计器中的数据模块中

数据模块的默认值为
System.Classes.TPersistent
。这指定数据模块与框架无关,因此既不接受VCL组件,也不接受FMX组件

在您的情况下,您可能希望接受VCL组件,因此需要指定
VCL.Controls.TControl
ClassGroup

阅读中的所有关于
ClassGroup

System.Classes.TDataModule及其子类,例如 Web.HTTPApp.TWebModule有一个名为ClassGroup的伪属性 是否有下列情况:

  • 确定数据模块的框架关联性。也就是说,ClassGroup指定数据模块是框架无关的 或者是使用特定的框架(即VCL或FMX)
  • 在工具选项板中启用特定于框架的非可视组件。您需要为中的类组设置特定于框架的值 对象检查器,以启用特定于框架的非可视 组件,例如:
    • TActionList仅为VCL,因此要在工具选项板中启用TActionList,必须将ClassGroup设置为VCL设置
    • TTimer同时存在于FMX和VCL中。要为正确的框架启用TTimer,必须将ClassGroup设置为FMX或VCL,以 匹配父应用程序的框架。(蒂默和战术家) 将在本主题后面进一步讨论。)

您能否给出一个非可视组件(最好是随Delphi提供的组件)的示例,该组件是不允许的?我从来没有见过这个问题。就像
TImageList
TMainMenu
TActionManager
-当我尝试粘贴一个时,它说找不到组件类,调色板只显示与数据库相关的组件。它可能是我的特定版本的RAD Studio吗?但是我有企业版,应该什么都有。我可以用
文件->新建->VCL表单应用程序
来确认这一点,然后用
文件->新建->其他->德尔福文件->数据模块
,在组件调色板中只剩下数据库、Intraweb、FastReports和Indy组件。(TImageList和TActionList不在那里。)使用Pro SKU,所以这不是导致问题的原因。@Ken事实上,XE2中没有破坏它。XE3没有解决任何问题。XE3所做的是将操作移出VCL并转移到一个较低的级别,以便对所有框架都可用。Perfecto!我知道它必须像往常一样简单。PS-困难的部分是找出如何创建数据模块,使其能够在应用程序中使用通用组件-我尝试创建/销毁了它..最后在项目的主
dpr
文件中阻塞,包装表单创建并运行
。另请参见从D2007迁移到XE2的应用程序(TImageList、TcxSchedulerStorage等)中没有问题,但在添加另一个数据模块时知道这一点很好。您可以在对象检查器中正确执行此操作:选择datamodule并相应地设置其ClassGroup属性。然后关闭并重新打开damodule单元。