在Delphi的早期版本中,我使用数据模块(TDataModule
)作为保留非可视组件的地方,以避免使主表单混乱。在Delphi XE2中,当我创建一个新的数据模块时,它只允许我在其中放置与数据库相关的组件(例如TADOConnection
和TDataSource
)。这是为什么以及如何将其他组件放入其中?还有其他选择吗?
答案 0 :(得分:21)
XE2版本更改了数据模块。请记住,除了长期存在的VCL之外,XE2还引入了一个新的组件框架FireMonkey。名为ClassGroup
的新伪属性已添加到数据模块中。它控制可以在IDE设计器中将哪些组件添加到数据模块。
数据模块的默认ClassGroup
为System.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)