Pseudo-propriété ClassGroup de TDataModule

De RAD Studio
Aller à : navigation, rechercher

Remonter à Création et modification de modules de données standard

Effets de la pseudo-propriété ClassGroup

System.Classes.TDataModule et ses classes descendantes, telles que Web.HTTPApp.TWebModule, ont une pseudo-propriété nommée ClassGroup qui effectue les tâches suivantes :

  • Détermine l'affinité de framework pour le module de données. Ainsi, ClassGroup spécifie que le module de données est indépendant du framework ou doit travailler avec un framework spécifique (à savoir VCL ou FMX).
  • Active les composants non visuels spécifiques au framework dans la Palette d'outils.
    Vous devez définir une valeur spécifique au framework pour ClassGroup dans l'inspecteur d'objets afin d'activer les composants non visuels spécifiques au framework tels que :
    • TActionList est VCL-seulement. Ainsi, pour activer TActionList dans la Palette d'outils, vous devez définir ClassGroup sur le paramètre VCL.
    • TTimer existe à la fois dans FMX et VCL. Pour activer TTimer pour le framework correct, vous devez définir ClassGroup sur FMX ou VCL, afin de correspondre au framework de l'application parent.
(TTimer et TActionList sont traités plus loin dans cette rubrique.

Puisque la pseudo-propriété ClassGroup est utilisée seulement par l'EDI et n'est pas une propriété générée par le compilateur (d'où, 'pseudo-propriété'), ClassGroup n'est pas documentée dans la Référence des bibliothèques générée par le compilateur. La page que vous lisez actuellement est la documentation relative à ClassGroup.

Remarque: Les deux frameworks, VCL et FMX, ne sont pas mutuellement compatibles. Pour cette raison, la combinaison de VCL et FMX dans une application n'est pas supportée. Voir Plate-forme d'applications FireMonkey.

Valeurs de ClassGroup

Voici les valeurs de ClassGroup que vous pouvez choisir dans l'inspecteur d'objets, notamment le framework et les éléments de la RTL qui peuvent être utilisés avec chaque choix spécifique au framework :

ClassGroup Framework associé Bibliothèque d'exécution

System.Classes.TPersistent

Aucun (indépendant du framework)

RTL Delphi

(à l'exception des éléments spécifiques au framework non supportés)

Vcl.Controls.TControl

Framework VCL

RTL Delphi

(à l'exception des éléments spécifiques au framework non supportés)

FMX.Controls.TControl

Framework FMX

RTL Delphi

(à l'exception des éléments spécifiques au framework non supportés)

TDataModule est initialement indépendant du framework ; définissez l'affinité de framework avec ClassGroup

Quand vous créez un module de données, le fichier d'unité contient initialement une directive qui définit la pseudo-propriété ClassGroup sur une valeur de base indépendante du framework (System.Classes.TPersistent), comme suit :

Delphi :

 {%CLASSGROUP 'System.Classes.TPersistent'}

C++ :

 #pragma classgroup "System.Classes.TPersistent"
Remarque: Cette directive est utilisée seulement par l'EDI et indique les relations du module de données avec un éventuel framework de composants particulier. L'EDI applique ensuite les types de composants que vous pouvez déposer sur le module de données.

Quand vous changez la valeur ClassGroup, la directive est automatiquement changée dans votre code.

Puisque TDataModule est initialement indépendant du framework, vous pouvez utiliser un module de données avec la VCL ou le framework FireMonkey. Cela signifie aussi que les classes et les membres spécifiques au framework (comme Vcl.ActnList.TActionList et FMX.Types.TTimer) ne sont pas disponibles dans la Palette d'outils pour un module de données indépendant du framework. Vous pouvez inclure les classes et membres appropriés, spécifiques au framework, en accédant à l'inspecteur d'objets et en définissant la propriété ClassGroup de votre module de données pour indiquer votre framework correct, comme l'un des suivants :

  • Vcl.Controls.TControl
  • FMX.Controls.TControl (macOS)

Exemples de composants non visuels spécifiques au framework

  • TActionList est un composant non visuel VCL, et en tant que tel, il n'apparaît pas dans la Palette d'outils pour un module de données dont la pseudo-propriété ClassGroup est System.Classes.TPersistent (indépendant du framework) plutôt que Vcl.Controls.TControl (spécifique au framework). De même, TActionList n'est pas disponible si la propriété ClassGroup est définie sur FMX.Controls.TControl.
  • TTimer a deux implémentations spécifiques au framework, comme suit
    Dans les deux cas, TTimer est seulement disponible dans la Palette d'outils quand la propriété ClassGroup est définie sur une valeur spécifique au framework, au lieu d'une valeur System.Classes.TPersistent indépendante du framework. Mais puisque TTimer a une implémentation VCL et FMX, assurez-vous de sélectionner la valeur ClassGroup correcte pour votre module de données, afin de correspondre au framework de l'application, sinon des erreurs peuvent se produire.

Après avoir sélectionné le Classgroup voulu, vous pouvez activer l'onglet Edition puis revenir à l'onglet Conception afin d'actualiser la Palette d'outils afin de refléter votre choix de Classgroup.

Dépannage des situations d'erreur

Si vous créez un module de données à l'intérieur d'une application fiches VCL, et définissez une valeur FMX pour la propriété ClassGroup, le message suivant est affiché quand vous essayez de déposer un composant FMX sur le module de données :

Class <classname> is not applicable to this module.

Ce message survient quand la valeur ClassGroup du module de données ne correspond pas au framework de l'application.

Un message similaire apparaît si vous créez une application FireMonkey, ajoutez un module de données, sélectionnez la valeur Vcl.Controls.TControl de ClassGroup et essayez de déposer un TTimer sur le module de données, puisque le composant non visuel Vcl.ExtCtrls.TTimer n'est pas compatible avec le framework FireMonkey.

Le message suivant peut aussi être affiché par l'EDI :

The following component(s) are not available in the specified class group.
This is likely to cause compile or runtime errors.
FMX.Types.TTimer

Si vous essayez de compiler un projet ayant une valeur de ClassGroup non compatible avec le framework de l'application, vous pourrez voir des erreurs de compilation pour les éléments qui ne sont pas supportés dans le framework en cours. Voici des exemples d'éventuelles erreurs :

Voir aussi