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

时间:2012-12-31 03:55:29

标签: delphi delphi-xe2 datamodule

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

2 个答案:

答案 0 :(得分:21)

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

数据模块的默认ClassGroupSystem.Classes.TPersistent。这指定数据模块是框架中性的,因此既不接受VCL组件也不接受FMX组件。

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

阅读documentation中的所有ClassGroup

  

System.Classes.TDataModule及其后代类,如   Web.HTTPApp.TWebModule,有一个名为ClassGroup的伪属性   执行以下操作:

     
      
  • 确定数据模块的框架关联。也就是说,ClassGroup指定数据模块是框架中立的   或者是使用特定框架(即VCL或FMX)。
  •   
  • 在工具选项板中启用特定于框架的非可视组件。您需要为ClassGroup设置特定于框架的值   Object Inspector,用于启用特定于框架的非可视化   组件如下:   
        
    • TActionList仅限VCL,因此要在工具选项板中启用TActionList,必须将ClassGroup设置为VCL设置。
    •   
    • TTimer存在于FMX和VCL中。要为正确的框架启用TTimer,必须将ClassGroup设置为FMX或VCL,to   匹配父应用程序的框架。 (TTimer和TActionList   将在本主题后面进一步讨论。)
    •   
  •   

答案 1 :(得分:11)

中的这种(错误)行为
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)