Pseudo-Eigenschaft ClassGroup von TDataModule

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Standard-Datenmodule erstellen und bearbeiten

Wirkungen der Pseudo-Eigenschaft ClassGroup

System.Classes.TDataModule und davon abgeleitete Klassen, wie Web.HTTPApp.TWebModule, verfügen über die Pseudo-Eigenschaft ClassGroup, die Folgendes bewirkt:

  • Legt die Framework-Verbindung für das Datenmodul fest. ClassGroup gibt an, dass das Datenmodul entweder Framework-unabhängig oder für ein bestimmtes Framework (nämlich VCL oder FMX) vorgesehen ist.
  • Aktiviert Framework-spezifische, nicht-visuelle Komponenten in der Tool-Palette.
    Für ClassGroup müssen Sie im Objektinspektor einen Framework-spezifischen Wert setzen, damit Framework-spezifische, nicht-visuelle Komponenten, wie die folgenden, aktiviert werden:
    • TActionList steht nur in der VCL zur Verfügung. Um TActionList in der Tool-Palette zu aktivieren, müssen Sie ClassGroup auf die VCL-Einstellung setzen.
    • TTimer ist sowohl in FMX als auch der VCL vorhanden. Um TTimer für das richtige Framework zu aktivieren, müssen Sie ClassGroup entweder auf FMX oder auf VCL (entsprechend dem Framework der übergeordneten Anwendung) setzen.
(TTimer und TActionList werden weiter unten in diesem Thema ausführlicher behandelt).

Da die Pseudo-Eigenschaft ClassGroup nur von der IDE verwendet wird und keine vom Compiler erzeugte Eigenschaft ist (daher "Pseudo-Eigenschaft"), ist sie in der vom Compiler erzeugten Bibliotheksreferenz nicht dokumentiert. Die Seite, die Sie gerade lesen, ist die Dokumentation für ClassGroup.

Hinweis: Die beiden Frameworks, VCL und FMX, sind nicht wechselseitig kompatibel. Aus diesem Grund wird die Kombination der VCL mit FMX in einer Anwendung nicht unterstützt. Siehe FireMonkey-Anwendungsplattform.

Werte von ClassGroup

Im Folgenden finden Sie die Werte für ClassGroup, die Sie im Objektinspektor auswählen können, sowie das Framework und die RTL-Elemente, die für das jeweilige Framework verwendet werden können:

ClassGroup Zugeordnetes Framework Laufzeitbibliothek

System.Classes.TPersistent

Keines (Framework-unabhängig)

Delphi-RTL

(außer nicht unterstützte Framework-spezifische Elemente)

Vcl.Controls.TControl

VCL-Framework

Delphi-RTL

(außer nicht unterstützte Framework-spezifische Elemente)

FMX.Controls.TControl

FMX-Framework

Delphi-RTL

(außer nicht unterstützte Framework-spezifische Elemente)

TDataModule ist zunächst Framework-unabhängig; mit ClassGroup wird die Framework-Zuordnung festgelegt

Beim Erstellen eines Datenmoduls enthält die Unit-Datei eine Direktive, die die Pseudo-Eigenschaft ClassGroup folgendermaßen auf einen Framework-unabhängigen Basiswert (System.Classes.TPersistent) setzt:

Delphi:

 {%CLASSGROUP 'System.Classes.TPersistent'}

C++:

 #pragma classgroup "System.Classes.TPersistent"
Hinweis: Diese Direktive wird nur von der IDE verwendet und gibt die Verbindung des Datenmoduls mit einem bestimmten Komponenten-Framework (sofern vorhanden) an. Die IDE zeigt dann die Arten von Komponenten an, die auf dem Datenmodul abgelegt werden können.

Wenn Sie den ClassGroup-Wert ändern, wird die Direktive automatisch im Code geändert.

Weil TDataModule anfänglich Framework-unabhängig ist, können Sie ein Datenmodul mit dem VCL- oder dem FireMonkey-Framework erstellen. Das bedeutet aber auch, dass Framework-spezifische Klassen und Member (wie Vcl.ActnList.TActionList und FMX.Types.TTimer) für ein Framework-unabhängiges Datenmodul in der Tool-Palette nicht verfügbar sind. Die passenden Framework-spezifischen Klassen und Member können Sie im Objektinspektor durch Setzen der Eigenschaft ClassGroup des Datenmoduls zur Angabe des richtigen Frameworks wie folgt einschließen:

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

Beispiele für Framework-spezifische, nicht-visuelle Komponenten

  • TActionList ist eine nicht-visuelle VCL-Komponente und erscheint daher nicht in der Tool-Palette für ein Datenmodul, dessen Pseudo-Eigenschaft ClassGroup auf System.Classes.TPersistent (Framework-unabhängig) anstatt auf Vcl.Controls.TControl (Framework-spezifisch) gesetzt ist. Ebenso steht TActionList nicht zur Verfügung, wenn ClassGroup auf FMX.Controls.TControl gesetzt ist.
  • Für TTimer sind die folgenden beiden Framework-spezifischen Implementierungen vorhanden:
    In beiden Fällen steht TTimer in der Tool-Palette nur zur Verfügung, wenn die Eigenschaft ClassGroup auf einen Framework-spezifischen Wert und nicht auf das Framework-unabhängige System.Classes.TPersistent gesetzt ist. Da aber für TTimer sowohl eine VCL- als auch eine FMX-Implementierung verfügbar ist, müssen Sie sicherstellen, dass für das Datenmodul der dem Anwendungs-Framework entsprechende ClassGroup-Wert gesetzt ist. Andernfalls könnten Fehler auftreten.

Nach Auswahl der gewünschten ClassGroup müssen Sie ggf. zur Registerkarte Bearbeiten und dann zurück zur Registerkarte Design wechseln, um die Tool-Palette mit der ClassGroup-Auswahl zu aktualisieren.

Fehlerbehebung

Wenn Sie in einer VCL-Formularanwendung ein Datenmodul erstellen und für die Eigenschaft ClassGroup einen FMX-Wert setzen, wird, beim Versuch, eine FMX-Komponente auf dem Datenmodul abzulegen, die folgende Meldung angezeigt:

Class <classname> is not applicable to this module.

Diese Meldung erscheint, wenn der ClassGroup-Wert des Datenmoduls nicht dem Framework der Anwendung entspricht.

Eine ähnliche Meldung erscheint, wenn Sie eine FireMonkey-Anwendung erstellen, ein Datenmodul hinzufügen, den ClassGroup-Wert auf Vcl.Controls.TControl setzen und versuchen, eine TTimer-Komponente auf dem Datenmodul abzulegen, weil die nicht-visuelle Komponente Vcl.ExtCtrls.TTimer nicht mit dem FireMonkey-Framework kompatibel ist.

Die folgende Meldung könnte ebenfalls von der IDE angezeigt werden:

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

Wenn Sie versuchen, ein Projekt zu compilieren, dessen ClassGroup-Wert nicht mit dem Anwendungs-Framework kompatibel ist, werden ggf. Compiler-Fehler für Elemente angezeigt, die im aktuellen Framework nicht unterstützt werden. Unter anderem könnten folgende Fehler angezeigt werden:

Siehe auch