delphidelphi-xe2datamodule

Delphi XE2 Data Module expects only database components?


In prior versions of Delphi, I have used the data module (TDataModule) as a place to keep non-visual components to avoid cluttering up the main form. In Delphi XE2, when I create a new data module, it only allows me to place database related components in it (such as TADOConnection and TDataSource). Why is this and how can I put other components in it? Is there an alternative?


Solution

  • Data modules changed with the XE2 release. Remember that XE2 introduced a new component framework, FireMonkey, in addition to the long-standing VCL. A new pseudo-property, named ClassGroup was added to data modules. This controls what components can be added to the data module in the IDE designer.

    The default ClassGroup for a data module is System.Classes.TPersistent. This specifies that the data module is framework neutral and so accepts neither VCL components nor FMX components.

    In your case you probably want to accept VCL components so you need to specify a ClassGroup of Vcl.Controls.TControl.

    Read all about ClassGroup in the documentation.

    System.Classes.TDataModule and its descendant classes, such as Web.HTTPApp.TWebModule, have a pseudo-property named ClassGroup that does the following:

    • Determines the framework affinity for the data module. That is, ClassGroup specifies that the data module is either framework-neutral or is to work with a specific framework (namely, VCL or FMX).
    • Enables framework-specific nonvisual components in the Tool Palette. You need to set a framework-specific value for ClassGroup in the Object Inspector in order to enable framework-specific nonvisual components such as the following:
      • TActionList is VCL-only, and so to enable TActionList in the Tool Palette, you must set ClassGroup to the VCL setting.
      • TTimer exists in both FMX and VCL. To enable TTimer for the correct framework, you must set ClassGroup to either FMX or VCL, to match the framework of the parent application. (TTimer and TActionList are further discussed later in this topic.)