0

ここに投稿された例を出発点として取り組みました: Firemonkey TGrid で TTextCell の背景を変更する

画像を参照する textcellstyle を作成しましたが、これはうまく機能しています。プログラムを実行すると、すべてのセルに期待どおりの背景画像が表示されます。

上記のリンクから、Mike Sutton (あなたがこれを読んでくれていることを願っています。あなたの意見がなかったらどうしよう!) は次のように書いています (簡単にするためにここで繰り返します):

「次に、各セルの StyleLookup プロパティを設定してそれを使用するか、スタイル StyleName を TextCellStyle に設定して、すべての TTextCell で自動的に選択されるようにすることができます。」

フォントの色の変更に関するクエリ ( Delphi XE4 Firemonkey Grid Control - Styling cells individual ) に続いて、背景色も動的に設定できますか?

セルの作成に関する私のコード:

Constructor TFinancialCell.Create(AOwner:TComponent);

begin
  inherited;
  StyleLookup:='textcellstyle';
  StyledSettings:=StyledSettings-[TStyledSetting.ssStyle,TStyledSetting.ssFontColor]; 
  TextAlign:=TTextAlign.taTrailing;
end;

これにより、イメージが TFinancialCell に正常に適用されます。

しかし、フォントの色のクエリに従って、特定の値に達したときなどにのみ画像の背景を表示したいと思います。

Procedure TFinancialCell.ApplyStyling;
begin
  Font.Style:=[TFontStyle.fsItalic];

  If IsNegative then
    FontColor:=claRed
  else
    FontColor:=claGreen;

  If IsImportant then Font.Style:=[TFontStyle.fsItalic,TFontStyle.fsBold]; 
  If Assigned(Font.OnChanged) then
    Font.OnChanged(Font);

  Repaint;
end;

これを行う方法についての助けをいただければ幸いです。

4

1 に答える 1

0

ありがとうマイク。少しいじる必要がありましたが、あなたの提案に基づいて動作するようになりました。次のように、stylecontainer の textcellstyle に TRectangle を追加しました。

textcellstyle : TLayout
    background: TSubImage
        rectangle1: TRectangle
        rectanimation: TRectAnimation

TFinancialCell.ApplyStyle で FindStyleResource ('background') を試しましたが、これは常に nil を返しました。これを FindStyleResource ('rectangle1') に変更したところ、うまくいきました。これは、オブジェクト インスペクターで関連する StyleName プロパティ (長方形 1 のデフォルトは明らかに 'Rectangle1') を探すためですか? 木には木がよく見えていませんが、お分かりいただけると思います...

作業コード:

Procedure TFinancialCell.ApplyStyle;

var 
  T : TFMXObject;

begin
  inherited;

  T:=FindStyleResource('Rectangle1');

  If (T<>nil) and (T is TRectangle) then
  begin 
    If TRectangle(T).Fill<>nil then 
    begin 
      If IsNegative then 
      begin
        TRectangle(T).Fill.Color:=claRed; 
        Repaint;
      end;  
    end;
  end;

  ApplyStyling;
end;

また、別の演習として、上記のコードを TFinancialCell.ApplyStyling に配置しようとしましたが、そこでも機能しました。

これらのスタイルに関するこれまでの私の理解の要約は次のとおりです (必要に応じて修正/コメントしてください)。

  1. textcellstyle というスタイルを作成しました。これを TFinancialCell.Create で TFinancialCell クラス [StyleLookup:='textcellstyle'] に適用します。
  2. TFinancialCell.ApplyStyling を呼び出すと、TFinancialCell の Font プロパティと FontColor プロパティに直接アクセスできます。これらのプロパティは TTextCell のプロパティであるためです。
  3. セルの背景をペイントしたい場合は、textcellstyle 'style' に手動で追加した TRectangle コンポーネントを明示的に呼び出し、そこから Fill などのプロパティにアクセスする必要があります。
于 2013-05-16T13:34:27.603 に答える