Firemonkey Grid Control - Styling eine Zelle basierend auf einem Wert (über die OnGetValue function call)

Ich bin auf der Suche für empfohlenen Lösung, um Stil ein TGrid-Zelle, die gezeichnet wird durch die OnGetValue nennen (das heißt, zu malen die Zellen in der Ansicht). Für den hintergrund, eine exzellente Antwort von Mike, der zeigte, wie einfach tAlign Eigenschaft, wenn die Zelle angelegt wird; aber meine nächste Herausforderung ist die Färbung der Inhalt der Zelle.

Früheren posting/Antwort

Ziel ist die Veränderung der Zelle Attribute (Schriftart, Stil, Farbe, etc...) von dem Wert bin ich etwa wieder, wie die Zelle "Wert". In dem unten aufgeführten Beispiel; es wäre die Anwendung eines Stils auf den OnGetValue "Wert" zurückgegeben wird. Es kann gut sein, dass wir zu tun haben, das über eine FM-Stylesheet, oder können wir direkt zur TText Attribute? Im Idealfall, beide Szenarien wären toll - aber in diesem Stadium nehme ich entweder Lösung... (;->

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects, FMX.Grid,
  FMX.Layouts, FMX.Edit;

type
  TForm1 = class(TForm)
    Grid1: TGrid;
    Button1: TButton;
    StyleBook1: TStyleBook;
    procedure Grid1GetValue(Sender: TObject; const Col, Row: Integer;
      var Value: Variant);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TStringColNum = class(TStringColumn)
  private
    function CreateCellControl: TStyledControl; override;
  published
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

function TStringColNum.CreateCellControl: TStyledControl;
begin
  Result:=TTextCell.Create(Self);
  TTextCell(Result).TextAlign := TTextAlign.taTrailing;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Grid1.AddObject(TStringColumn.Create(Self));
  Grid1.AddObject(TStringColNum.Create(Self)); // Right Aligned column?

  Grid1.RowCount:=5000;
  Grid1.ShowScrollBars:=True;
end;

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
  var Value: Variant);
begin
  if Col=0 then
    Value:='Row '+IntToStr(Row);

  if Col=1 then
    Value := 'Row '+IntToStr(Row);

// Apply style based on value ?

end;

end.

Vielen Dank im Voraus,
Ian.

  • Können Sie definieren ', basierend auf einem Wert'? Meinst du, sagen Sie, wenn der Wert negativ ist dann ist die Schrift rot sein usw?
  • Hallo Mike - ja, spot-on. Ich habe zwei Szenarien, aber beide sind nach dem gleichen Prinzip. Ein Szenario ist der negative Wert wird ROT dargestellt, und das andere Szenario ist zu "Fett" ein Element in der Liste (die ich wählen werden - durch off-grid-statt details; wichtige Kunden etc...). Vielen Dank im Voraus. Ian.
InformationsquelleAutor Ian | 2012-02-13
Schreibe einen Kommentar