title: Firemonkey Grid Control - Styling a Cell based on a value (via the OnGetValue function call)
body: <p>I am looking for recommended solution to style a TGrid cell that is being drawn by the OnGetValue call (that is called to paint the cells in view).  For background, an excellent response by Mike, showed how to simply apply a tAlign property when the cell is created; but my next challenge is colouring the cell contents.</p>
  
  <p><a href="https://stackoverflow.com/questions/9250491/firemonkey-grid-control-aligning-a-column-to-the-right">Previous posting/answer</a></p>
  
  <p>The objective is to change the cell attributes (Font, style, colour etc...) of the value I am about to return as the cell "Value".  In the example below; it would be applying a style to the OnGetValue "value" that is being returned.  It may well be that we have to do this via a FM Stylesheet; or can we get directly to the TText attributes?  Ideally, both scenarios would be great - but at this stage I will take either solution... (;-></p>
  
  <pre><code>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.
  </code></pre>
  
  <p>Many thanks in advance,
  Ian.</p>