¿El módulo de datos de Delphi XE2 solo espera componentes de base de datos?
delphi-xe2 datamodule (2)
En versiones anteriores de Delphi, he usado el módulo de datos ( TDataModule
) como un lugar para mantener los componentes no visuales para evitar saturar la forma principal. En Delphi XE2, cuando creo un nuevo módulo de datos, solo me permite colocar componentes relacionados con la base de datos (como TADOConnection
y TDataSource
). ¿Por qué es esto y cómo puedo poner otros componentes en él? ¿Hay alguna alternativa?
Este comportamiento (buggy) en
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.
es causado por la linea
{%CLASSGROUP ''System.Classes.TPersistent''}
Para deshacerse de simplemente eliminar o modificar la línea en
{.%CLASSGROUP ''System.Classes.TPersistent''}
Después de cambiar a la vista Design
, verá todos los componentes como espera.
(Delphi XE2 16.0.4504.48759)
Módulos de datos modificados con la versión XE2. Recuerde que XE2 introdujo un nuevo marco de componentes, FireMonkey, además del VCL de larga data. Se agregó una nueva pseudo-propiedad, llamada ClassGroup
a los módulos de datos. Esto controla qué componentes se pueden agregar al módulo de datos en el diseñador de IDE.
El ClassGroup
de ClassGroup
predeterminado para un módulo de datos es System.Classes.TPersistent
. Esto especifica que el módulo de datos es neutral al marco y, por lo tanto, no acepta componentes VCL ni componentes FMX.
En su caso, es probable que desee aceptar los componentes de VCL, por lo que necesita especificar un ClassGroup
de Vcl.Controls.TControl
de Vcl.Controls.TControl
.
Lea todo sobre ClassGroup
en la ClassGroup .
System.Classes.TDataModule y sus clases descendientes, como Web.HTTPApp.TWebModule, tienen una pseudo-propiedad llamada ClassGroup que hace lo siguiente:
- Determina la afinidad del marco para el módulo de datos. Es decir, ClassGroup especifica que el módulo de datos es independiente del marco o debe trabajar con un marco específico (a saber, VCL o FMX).
- Habilita componentes no visuales específicos del marco en la paleta de herramientas. Debe establecer un valor específico del marco para ClassGroup en el Inspector de objetos para habilitar componentes no visuales específicos del marco, como los siguientes:
- TActionList es solo para VCL, y para habilitar TActionList en la paleta de herramientas, debe establecer ClassGroup en la configuración de VCL.
- TTimer existe tanto en FMX como en VCL. Para habilitar TTimer para el marco correcto, debe configurar ClassGroup en FMX o VCL, para que coincida con el marco de la aplicación principal. (TTimer y TActionList se tratan más adelante en este tema).