在以前的Delphi版本中,我曾经使用数据模块 (TDataModule
) 存储非可视化组件,以避免主窗体混乱。但在 Delphi XE2 中,新建数据模块时只能放置与数据库相关的组件(如 TADOConnection
和 TDataSource
)。这是为什么?如何将其他组件放入其中?是否有替代方案?
在以前的Delphi版本中,我曾经使用数据模块 (TDataModule
) 存储非可视化组件,以避免主窗体混乱。但在 Delphi XE2 中,新建数据模块时只能放置与数据库相关的组件(如 TADOConnection
和 TDataSource
)。这是为什么?如何将其他组件放入其中?是否有替代方案?
XE2发布后,数据模块发生了变化。请记住,XE2不仅引入了长期存在的VCL,还引入了一个新的组件框架FireMonkey。数据模块添加了一个名为ClassGroup
的新伪属性。这控制了可以在IDE设计器中向数据模块添加哪些组件。
数据模块的默认ClassGroup
是System.Classes.TPersistent
。这指定数据模块是框架中立的,因此不接受VCL组件或FMX组件。
在您的情况下,您可能希望接受VCL组件,因此需要指定ClassGroup
为Vcl.Controls.TControl
。
请阅读documentation以了解有关ClassGroup
的所有信息。
这 (有缺陷的) 行为在
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)
dpr
文件中使用try..finally块来创建/销毁它,包装表单创建和Run
。 - Jerry DodgeTPersistent
会使数据模块只允许数据库相关组件?这是如何实现的?TComponent
是TPersistent
。 - Jerry Dodge
TImageList
或TMainMenu
或TActionManager
- 当我尝试粘贴其中一个时,它会显示组件类未找到,并且工具箱只显示与数据库相关的组件。 - Jerry Dodge