Firemonkey Grille de Contrôle - le Style d'une Cellule basée sur une valeur (par l'intermédiaire de la OnGetValue appel de fonction)

Je suis à la recherche de solution recommandée au style d'une TGrid cellule qui est en cours d'élaboration par le OnGetValue appel (qui est appelé à peindre les cellules en vue). Pour le fond, une excellente réponse de Mike, a montré comment il suffit d'appliquer un tAlign propriété lorsque la cellule est créée; mais mon prochain défi est la coloration du contenu de la cellule.

Annonce précédente/répondre

L'objectif est de modifier les attributs de cellules (Police, style, couleur, etc...) de la valeur que je suis sur le point de retourner en tant que cellule de "Valeur". Dans l'exemple ci-dessous; il serait d'appliquer un style à la OnGetValue "valeur" qui est retourné. Il se pourrait bien que nous avons pour ce faire par l'intermédiaire d'un FM de la feuille de style; ou peut-on passer directement à l'TText attributs? Idéalement, les deux scénarios serait formidable - mais à ce stade je vais prendre la solution... (;->

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.

Merci beaucoup à l'avance,
Ian.

Pouvez-vous définir le terme "basée sur une valeur'? Voulez-vous dire, dire, si la valeur est négative, alors la police sera rouge etc?
Salut Mike - Oui; sur place. J'ai deux scénarios, mais les deux sont le même principe. Un scénario est négatif, la valeur est affichée en ROUGE et l'autre scénario est "bold" un élément dans la liste (que je choisis - en raison hors de la grille de tenue des détails; l'important client, etc...). Merci à l'avance. Ian.

OriginalL'auteur Ian | 2012-02-13