Firemonkey Grid Control - стилизация ячейки на основе значения (с помощью вызова функции OnGetValue)
Я ищу рекомендуемое решение для стилизации ячейки TGrid, которая рисуется с помощью вызова OnGetValue (который вызывается для рисования ячеек в поле зрения). Для фона отличный ответ Майка показал, как просто применять свойство tAlign при создании ячейки; но моя следующая задача - покрасить содержимое клетки.
Цель состоит в том, чтобы изменить атрибуты ячейки (шрифт, стиль, цвет и т. Д.) Значения, которое я собираюсь вернуть в качестве ячейки «Значение». В приведенном ниже примере; это будет применение стиля к «значению» OnGetValue, которое возвращается. Вполне возможно, что мы должны сделать это с помощью таблицы стилей FM; или мы можем получить непосредственно к атрибутам TText? В идеале оба сценария были бы хорошими, но на этом этапе я приму любое решение ... (; ->
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.
Большое спасибо заранее, Ян.