2

から継承するカスタム グリッド コントロールがありTGridますTFmGrid。このコントロールは、Rad Studio 10 Seattle Update One で正常に機能していました。TFmGrid最近 10.1 Berlin にアップグレードしたところ、アプリケーションの実行時とデザイナーの両方で次のエラー メッセージがコントロールに表示されることに気付き始めました。

TStyledPresentationProxy の子孫がクラス TFmGrid に登録されていません。FMX.Grid.Style モジュールを uses セクションに追加する必要があるかもしれません。

以下の画像は、グリッド コントロールにエラー メッセージがどのように表示されるかを示しています。

ここに画像の説明を入力

メッセージが示すように、コントロール #include <FMX.Grid.Style.hpp>のヘッダー ファイルに追加することから始めましたが、これは何もしていないようです。TFmGrid

したがって、 の子孫を登録しようとする限り、TStyledPresentationProxyどこから始めればよいか正確にはわかりません。メソッドに関するこのドキュメントを見つけました:

指定された名前、または指定されたコントロール クラスとコントロール タイプの組み合わせで、プレゼンテーション プロキシ クラスの登録を試みます。

したがって、このメソッドまたは少なくとも同様のものを使用する必要があると思いますが、このメソッドを呼び出す方法がわかりません。

しかし、それでは、このコードをどこで呼び出すべきかという問題が生じます。

カスタム コントロールの名前空間Register()には、コントロールの作成時に IDE によって自動生成されたと思われるメソッドがあります。

namespace Fmgridu
{
    void __fastcall PACKAGE Register()
    {
        TComponentClass classes[1] = {__classid(TFmGrid)};
        RegisterComponents(L"Kalos FM Controls", classes, 0);
    }
}  

の子孫を登録するには、そこに何かを呼び出す必要がありTStyledPresentationProxyますか? これについての適切な方法は何ですか?

4

2 に答える 2

4

TfmGridで仮想メソッドDefinePresentationNameをオーバーライドし、グリッドのプレゼンテーション名の名前を返すだけです。

function TfmGrid.DefinePresentationName: string;
begin
  Result := 'Grid-' + GetPresentationSuffix;
end;

Fm は文字列名でプレゼンテーションを登録し、それにクラス名を使用するため、新しいコンポーネントを (既存のものに基づいて) 作成すると、クラス名が自動的に変更されるため、システムはプレゼンテーションを見つけることができません。2 つの解決策があります。

  1. TGrid (DefinePresentationName) からのプレゼンテーションを使用すると述べました。
  2. クラスの既存のプレゼンテーションを登録します (FMX.Grid.Style.pas の初期化セクションを見てください)。

PS 1 年前に、FireMonkey コントロールの開発の一般的な eNew アプローチ「コントロール – モデル – プレゼンテーション」でそれについての記事を書きました。パート1お役に立てば幸いです

于 2016-05-20T12:49:08.573 に答える