Раскрашиваем ячейки, колонки и ряды TStringGrid в Fire Monkey, используя RAD Studio

Желание приукрасить, или хотя бы раскрасить свой труд есть у многих людей. Таблицы с цветом намного информативнее и просто красивее. В Fire Monkey для компонента TStringGrid эта задача немного усложнилась по сравнению с в VCL. Перейду непосредственно к тому, как раскрашивать TStringGrid. Поясню на примере ниже.

tableraskr

Весь код приводится в обработчике события

procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates);

чтобы раскрасить цветом $FF94DDFD только первый горизонтальный ряд (красная цифра 1 на рисунке) нужен такой код:

if Row=0 then // ряды отсчитываются с 0
begin
Canvas.Fill.Color:=$FF94DDFD;
Canvas.FillRect(Bounds,0,0,AllCorners,1);
TOpenColumn(Column).DefaultDrawCell(Canvas,Bounds,Row,Value,State);
end;

Метод StringGrid1.DefaultDrawColumnCell заполняет ячейку по умолчанию текстом и прочими атрибутами, код меняет только заливку ячейки. Ряд заполняется цветом полностью.

Чтобы заливка не  касалась разделительных линий между ячейками, нужно указать границы заливки по одному пикселю с каждой стороны ячейки:

var
bn:TrectF;
begin
bn:=Bounds;
bn.Left:=bn.Left+1;
bn.Right:=bn.Right-1;
bn.Bottom:=bn.Bottom-1;
bn.Top:=bn.Top+1;

И еще одно новшество TStringGrid в Fire Monkey: к ряду можно обратится прямо — через константу Row, а вот к колонке — нет, поэтому нужно вводить дополнительный тип и обращаться к колонке через него:

type
  TOpenColumn = class (TColumn);

Отдельные ячейки (красная цифра 2 на рисунке)  можно залить так:

if ((Row=1)or(Row=5)or(Row=11)or(Row=15)or(Row=19)) and (TOpenColumn(Column).Index=0) then
begin
Canvas.Fill.Color:=$FFF2EAA2;// темно-желтый цвет
Canvas.FillRect(Bn,0,0,AllCorners,1);
TOpenColumn(Column).DefaultDrawCell(Canvas,Bounds,Row,Value,State);
end;

Горизонтальные ряды  (красная цифра 4 на рисунке) :

if ((Row=3) or(Row=7)or(Row=9)or(Row=13)or(Row=17)or(Row=21)or(Row=23)) then
begin
Canvas.Fill.Color:= $FFFDFBF0; // светло-желтый цвет
Canvas.FillRect(Bn,0,0,AllCorners,1);
TOpenColumn(Column).DefaultDrawCell(Canvas,Bounds,Row,Value,State);
end;

Вертикальные ряды   (красная цифра 3 на рисунке) :

if (TOpenColumn(Column).Index=2)or (TOpenColumn(Column).Index=4) or (TOpenColumn(Column).Index=6) then
begin
Canvas.Fill.Color:=$FFFDFBF0;//тот же светло-желтый цвет
Canvas.FillRect(Bn,0,0,AllCorners,1);
TOpenColumn(Column).DefaultDrawCell(Canvas,Bounds,Row,Value,State);
end;

ну вот и всё раскрашивание.
Если захочется выравнивать текст в ячейках, то это можно сделать так (я выравнивал первый столбец по левому краю, остальное — по центру )

if (TOpenColumn(Column).Index=0) then StringGrid1.TextSettings.HorzAlign:=TTextAlign.Leading else StringGrid1.TextSettings.HorzAlign:=TTextAlign.Center;

Вам понравиться

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *