Delphiの以前のバージョンではTDataModule
、メインフォームが乱雑にならないように、非ビジュアルコンポーネントを保持する場所としてデータモジュール()を使用していました。Delphi XE2では、新しいデータモジュールを作成すると、データベース関連のコンポーネント(TADOConnection
およびなどTDataSource
)のみをそのモジュールに配置できます。これはなぜですか?他のコンポーネントをどのように入れることができますか?代替手段はありますか?
2 に答える
XE2リリースで変更されたデータモジュール。XE2は、長年のVCLに加えて、新しいコンポーネントフレームワークであるFireMonkeyを導入したことを忘れないでください。名前付きの新しい疑似プロパティClassGroup
がデータモジュールに追加されました。これは、IDEデザイナでデータモジュールに追加できるコンポーネントを制御します。
ClassGroup
データモジュールのデフォルトはですSystem.Classes.TPersistent
。これは、データモジュールがフレームワークニュートラルであり、VCLコンポーネントもFMXコンポーネントも受け入れないことを指定します。
あなたの場合、おそらくVCLコンポーネントを受け入れたいので、のを指定する必要がありClassGroup
ますVcl.Controls.TControl
。
ドキュメントClassGroup
ですべてを読んでください。
System.Classes.TDataModuleとその子孫クラス(Web.HTTPApp.TWebModuleなど)には、次のことを行うClassGroupという名前の疑似プロパティがあります。
- データモジュールのフレームワークアフィニティを決定します。つまり、ClassGroupは、データモジュールがフレームワークに依存しないか、特定のフレームワーク(つまり、VCLまたはFMX)で動作することを指定します。
- ツールパレットでフレームワーク固有の非ビジュアルコンポーネントを有効にします。次のようなフレームワーク固有の非ビジュアルコンポーネントを有効にするには、オブジェクトインスペクタでClassGroupにフレームワーク固有の値を設定する必要があります。
- TActionListはVCLのみであるため、ツールパレットでTActionListを有効にするには、ClassGroupをVCL設定に設定する必要があります。
- TTimerはFMXとVCLの両方に存在します。正しいフレームワークに対してTTimerを有効にするには、親アプリケーションのフレームワークと一致するように、ClassGroupをFMXまたはVCLのいずれかに設定する必要があります。(TTimerとTActionListについては、このトピックの後半で詳しく説明します。)
この(バギー)動作
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.
ラインによって引き起こされます
{%CLASSGROUP 'System.Classes.TPersistent'}
行を削除または変更するだけで削除するには
{.%CLASSGROUP 'System.Classes.TPersistent'}
[表示]に切り替えるとDesign
、期待どおりにすべてのコンポーネントが表示されます。
(Delphi XE2 16.0.4504.48759)