TDataModule の ClassGroup 疑似プロパティ

提供: RAD Studio
移動先: 案内検索

標準データ モジュールの作成と編集 への移動

ClassGroup 疑似プロパティの効果

System.Classes.TDataModule とその下位クラス(たとえば Web.HTTPApp.TWebModule など)には、以下の役割を果たす ClassGroup という疑似プロパティがあります。

  • データ モジュールがフレームワークと密接な関係にあるかどうかを決定します。つまり、ClassGroup は、データ モジュールがフレームワークに依存しないか、それとも特定のフレームワーク(つまり、VCL か FMX)で機能するかを指定します。
  • [ツール パレット]でフレームワーク固有の非ビジュアル コンポーネントを有効にします。
    フレームワーク固有の非ビジュアル コンポーネント(たとえば以下など)を有効にするには、[オブジェクト インスペクタ]ClassGroup にフレームワーク固有の値を設定する必要があります。
    • TActionList は VCL 専用なので、[ツール パレット]で TActionList を有効にするには、ClassGroup を VCL 用の値に設定する必要があります。
    • TTimer は FMX と VCL の両方に存在しています。TTimer を適切なフレームワークに有効にするには、親アプリケーションのフレームワークに一致するように ClassGroup を FMX か VCL のどちらかに設定する必要があります。
(TTimerTActionList については後でさらに議論します。)

ClassGroup 疑似プロパティは IDE でのみ使用され、コンパイラで生成されるプロパティではない(そのため "疑似プロパティ" と呼ばれます)ので、ClassGroup については、コンパイラで生成される ライブラリ リファレンスでは説明されていません。お読みになっているページは ClassGroup のドキュメントです。

メモ: VCLFMX の両フレームワークは互いに互換性がありません。 このため、VCL と FMX をアプリケーションで組み合わせることはサポートされていません。 「FireMonkey アプリケーション プラットフォーム」を参照してください。

ClassGroup の値

以下は、[オブジェクト インスペクタ]で選択できる ClassGroup 値で、フレームワークや、フレームワーク固有の各選択肢で使用できる RTL 要素が含まれています。

ClassGroup 関連フレームワーク ランタイム ライブラリ

System.Classes.TPersistent

なし(フレームワークに依存しない)

Delphi RTL

(サポートされていないフレームワーク固有の要素を除く)

Vcl.Controls.TControl

VCL フレームワーク

Delphi RTL

(サポートされていないフレームワーク固有の要素を除く)

FMX.Controls.TControl

FMX フレームワーク

Delphi RTL

(サポートされていないフレームワーク固有の要素を除く)

TDataModule は最初はフレームワークに依存しない(ClassGroup でフレームワークとの関係を設定)

データ モジュールを作成すると、ユニット ファイルには、最初は以下のように、ClassGroup 疑似プロパティをフレームワークに依存しないベース値(System.Classes.TPersistent)に設定する指令が記述されます。

Delphi の場合:

 {%CLASSGROUP 'System.Classes.TPersistent'}

C++ の場合:

 #pragma classgroup "System.Classes.TPersistent"
メモ: この指令は、IDE でのみ使用されるもので、データ モジュールと特定のコンポーネント フレームワークとの関係を示します(そのような関係がある場合)。それにより、IDE では、データ モジュール上にドロップできるコンポーネントの種類を限定します。

ClassGroup 値を変更すると、コード内の指令は自動的に変更されます。

TDataModule は最初はフレームワークに依存しないので、VCL フレームワークでも FireMonkey フレームワークでもデータ モジュールを使用できます。 これはまた、フレームワークに依存しないデータ モジュールの場合は、フレームワーク固有のクラスやメンバ(たとえば、Vcl.ActnList.TActionListFMX.Types.TTimer など)を[ツール パレット]で使用できないということでもあります。[オブジェクト インスペクタ]にアクセスして、データ モジュールの ClassGroup プロパティを設定して適切なフレームワークを(以下のいずれか 1 つとして)指定することで、フレームワーク固有の適切なクラスやメンバを組み込むことができます。

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

フレームワーク固有の非ビジュアル コンポーネントの例

  • TActionList は VCL の非ビジュアル コンポーネントであるため、ClassGroup 疑似プロパティが Vcl.Controls.TControl(フレームワーク固有)ではなく System.Classes.TPersistent(フレームワーク非依存)になっているデータ モジュールの場合は、[ツール パレット]に表示されません。同様に、ClassGroupFMX.Controls.TControl に設定されている場合、TActionList は使用できません。
  • TTimer には、以下のように、フレームワーク固有の実装が 2 つあります。
    どちらの場合も、TTimer は、ClassGroup 疑似プロパティがフレームワーク非依存の System.Classes.TPersistent ではなくフレームワーク固有の値に設定されている場合にのみ[ツール パレット]で使用できます。しかし、TTimer には VCL による実装も FMX による実装もあるので、必ず、データ モジュールに合った ClassGroup 値を選択してアプリケーション フレームワークに一致させる必要があります。そうでなければ、エラーが発生するおそれがあります。

必要な ClassGroup 値を選択したあと、[ツール パレット]を更新して ClassGroup 値の選択を反映させるには、場合によっては、いったんコード エディタに切り替えてから[デザイン]タブに戻る必要があります。

エラー状況のトラブルシューティング

VCL フォーム アプリケーション内にデータ モジュールを作成し、その ClassGroup 疑似プロパティに FMX 値を設定した場合は、データ モジュールに FMX コンポーネントをドロップしようとすると、以下のメッセージが表示されます。

Class <classname> is not applicable to this module.(クラス <クラス名> はこのモジュールには適用できません。)

このメッセージは、データ モジュールの ClassGroup 値がアプリケーションのフレームワークに一致しない場合に出力されます。

FireMonkey アプリケーションを作成して、データ モジュールを追加し、ClassGroup 値として Vcl.Controls.TControl を選択したあと、データ モジュールに TTimer をドロップしようとした場合にも、同様のメッセージが表示されます。非ビジュアル コンポーネント Vcl.ExtCtrls.TTimer が FireMonkey フレームワークと互換性がないからです。

IDE では、以下のメッセージも表示される可能性があります。

以下のコンポーネントは指定されたクラス グループで使用できません。
おそらくコンパイル エラーまたは実行時エラーが発生します。
FMX.Types.TTimer

アプリケーション フレームワークと互換性のない ClassGroup 値を持つプロジェクトをコンパイルしようとすると、現在のフレームワークでサポートされていない要素のコンパイル エラーが表示される可能性があります。表示される可能性のあるエラーには、以下のものがあります。

関連項目