Delphi XE2 で、あるデータ モジュールから別のデータ モジュールにコンポーネントをコピー アンド ペーストしようとしました。コンポーネントは、Fast Report データ ソース リンク コンポーネントでした。データ モジュールはまったく新しいもので、XE2 でその瞬間に作成されました。
他の誰かが同じ問題を抱えていて、Quality Central で 106369 として報告し、同じエラー メッセージが表示されて、この不思議な DocWiki エントリにたどり着きました。
そのため、データ モジュールには、フレームワーク アフィニティと、ドキュメントによるとデザイン時のみの疑似プロパティが追加されました。
「ClassGroup 疑似プロパティは IDE でのみ使用され、コンパイラによって生成されたプロパティ (したがって、「疑似プロパティ」) ではないため、ClassGroup はコンパイラによって生成されたライブラリ リファレンスには記載されていません。あなたが読んでいるページはClassGroup のドキュメント」を参照してください。
したがって、これが存在することを初めて知ったのは、最初から再構築したくない既存の設計時のビルディング ブロックのセットからコンポーネントをコピーしてデータ モジュールに貼り付けることをブロックしたときです。
データ モジュールのアフィニティを変更すると、問題なくデータ モジュールに貼り付けることができます。Google-that-error に感謝します。そうしないと行き詰まります。
クロス プラットフォーム データ モジュールの作成を支援することを目的としているにもかかわらず、ドキュメントによると IDE にのみ影響する場合、これは設計時にこれを操作するときに表示される警告と矛盾します。それ:
EInvalidType : The following component(s) are not available in the specified
class group. This is likely to cause compile or runtime errors.
frxDBSet.TfrxDBDataset.
私が見ることができないのは、そのエラーメッセージがどのように正しく、ドキュメントも正しいかということです。
これが正しく設定されていない場合、警告はコンパイル、リンク、および実行時エラーを示唆しているようです。実際に何が起こっているのかを知りたい好奇心旺盛な人は、次のことを知りたがっています。これは何についてのもので、なぜ XE2 のデータ モジュールに追加されたのですか。恐竜の糞のようなものに足を踏み入れたような感覚で、この奇妙な機能に出くわし、この機能がどうなっているのか知りたいと思う人がいると思います。
現時点での私の最良の答えは、TPersistent に対するデータ モジュール アフィニティです。つまり、XE2 用語では、このデータ モジュールは VCL 固有の非ビジュアル コントロールを必要としないということです。Delphi の将来のバージョンでは、同様のマーカーを使用して、フォームを「VCL またはウィンドウへの依存関係がない」とマークすることもできるでしょうか?
更新 1: データ モジュールの .PAS ソース コードは、次のように、コンパイラ ディレクティブに少し似た方法でこの疑似プロパティを格納します。
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}