18

Delphiの以前のバージョンではTDataModule、メインフォームが乱雑にならないように、非ビジュアルコンポーネントを保持する場所としてデータモジュール()を使用していました。Delphi XE2では、新しいデータモジュールを作成すると、データベース関連のコンポーネント(TADOConnectionおよびなどTDataSource)のみをそのモジュールに配置できます。これはなぜですか?他のコン​​ポーネントをどのように入れることができますか?代替手段はありますか?

4

2 に答える 2

21

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については、このトピックの後半で詳しく説明します。)
于 2012-12-31T10:16:18.097 に答える
11

この(バギー)動作

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)

于 2012-12-31T07:52:48.420 に答える