Szukam zalecanego rozwiązania do stylizowania komórki TGrid, która jest rysowana przez wywołanie OnGetValue (która jest wywoływana do malowania komórek w widoku). W tle znakomita odpowiedź Mike'a pokazała, jak po prostu zastosować właściwość tAlign podczas tworzenia komórki; ale moim następnym wyzwaniem jest zabarwienie zawartości komórki.Sterowanie siatką Firemonkey - Stylizacja komórki na podstawie wartości (za pomocą wywołania funkcji OnGetValue)
Celem jest zmiana atrybutów komórki (czcionki, styl, kolor itp ...) wartości mam zamiar wrócić jak komórki „wartość”. W poniższym przykładzie; byłoby zastosowanie stylu do "wartości" OnGetValue, która jest zwracana. Może się zdarzyć, że musimy to zrobić za pomocą arkusza stylów FM; czy możemy przejść bezpośrednio do atrybutów TText? Idealnie, oba scenariusze byłoby świetnie - ale na tym etapie wezmę albo rozwiązanie ... (; -..>
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.
Wielkie dzięki z góry, Ian
można zdefiniować „na podstawie wartości”? Czy masz na myśli, powiedzmy, że jeśli wartość jest ujemna, to czcionka będzie czerwona itp.? –
Witaj Mike - Tak; na miejscu. Mam dwa scenariusze, ale obie są tą samą zasadą. Jeden scenariusz to wartość ujemna, która ma być wyświetlana na CZERWONO, a druga to "pogrubienie" pozycji na liście (którą wybieram - ze względu na brak informacji przechowywanych w sieci, ważny klient itp.). Z góry dziękuję. Ian. – Ian