Delphi XE2数据模块只需要数据库组件?
在Delphi的早期版本中,我使用了数据模块(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
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单元。