2016-04-08 16 views
1

Firemonkey(fmx)用に作成されたカスタムDelphiコンポーネントがあります。私は今カスタムスタイルをコンポーネントに適用する必要があります。スタイルはリソースに保存されます。以前はメソッドでTStyleManager.LoadFromResourceを呼び出してこれを行っていました。Delphi Seattleを使用してカスタムFiremonkeyコンポーネントにカスタムスタイルを適用する方法

この方法(LoadFromResource)は、FiremonkeyフレームワークのためのDelphi 10 Seattleではもう存在しません。

XE7での私のコードはLoadFromResourceて働いていた:

function TFMXPic.GetStyleObject: TFmxObject; 
var 
style : string; 
begin 
    if (StyleLookup = '') then 
    begin 
    style := GetClassStyleName; 
    Result := TControl(TStyleManager.LoadFromResource(HInstance, 
    style, RT_RCDATA)); 
    Exit; 
    end; 
    Result := inherited GetStyleObject; 
end; 

どのように私は、Delphi 10シアトルでこれを達成していますか?

+0

XE10はありません。あなたはDelphi 10 Seattleを意味しますか? –

+0

はい。最新のデルファイ。 – Christo

答えて

1

最初に、私はStyleLookupをチェックするのが正しいとは思わない。このプロパティは、スタイルブックでこの特定のスタイル名を探すようにコンポーネントに指示します。

次に、コンポーネントレベルでスタイルファイルを読み込もうとします。 FMXはこのように動作します。スタイルブックを持っていて、スタイルファイルをロードしてから、フォームの各コンポーネントがこのブックを使用して、stylelookup値で定義されたスタイル名を探します。

は、私の頭のうち、アクションのこのコースは、仕事をする必要があります:あなたはすでに行っているよう

  1. は、プロジェクトのリソースにスタイルファイルを追加します。

  2. は、フォームも、フォームのOnCreateイベントで

  3. でスタイルブックを追加TResourceStreamへのリソースファイルをロードし、その後に最後のロードあなたのコンポーネントの「MyComponentの」と呼ばれるスタイルを持っていると言います今、あなたはあなたのコンポーネントのこのことができます

希望をStyleLookup =「MyComponentの」プロパティを設定することで、スタイルにアクセスすることができます

  • TStyleBook.LoadFromStream

    を使用してスタイルブック。

  • +0

    ありがとうございます。残念ながら、TStylebookにはLoadFromresourceのプロパティはありません。また、デザイン時にカスタムコンポーネントにスタイルを追加しました。私はまだこれを達成することを望んでいた。 – Christo

    +0

    クリスト、私はTStylebook.LoadFromStreamを意味して申し訳ありません。私はポストでそれを修正しました。 –

    +0

    ありがとう、私はそれを働かせた。私は現在、ランタイムだけでなく、デザインタイムにも対応する必要があります。助言がありますか? – Christo

    0

    解決策が見つかりました。 TMSソフトウェアに感謝します。 TStyleManagerクラスの代わりにTStyleStreamingクラスを使用する必要があります。私のコードを以下のように変更しました(すべて動作中)

    function TMyComponent.GetStyleObject: TFmxObject; 
    var 
    style : string; 
    begin 
        if (StyleLookup = '') then 
        begin 
        style := GetClassStyleName; 
        Result := TControl(TStyleStreaming.LoadFromResource(HInstance, 
        style, RT_RCDATA)); 
        Exit; 
        end; 
        Result := inherited GetStyleObject; 
    end; 
    
    関連する問題