Fmx TStringGrid 行颜色
Fmx TStringGrid row color
我在 Delphi 10.1 的多设备应用程序中遇到问题(在 Windows 上)。
我有一个 StringGrid
(连接到数据库),我可以更改行的背景颜色,但问题是单元格之间有一个 "padding"(在 grey/silver 中)。
在onformCreate
中我定义:
stringgrid1.DefaultDrawing := False;
这是我的代码:
procedure Tlist_form.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var aRowColor: TBrush;
begin
aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha);
if (stringgrid1.Cells[7,row]='1') then
aRowColor.Color := TAlphaColors.Green
else
aRowColor.Color := TAlphaColors.Red;
Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
aRowColor.free;
end;
在 Delphi 6 我从来没有遇到过这个问题,我不知道如何解决它。
谢谢。
解决方案 1(在设计时):
对于每个 StringColumn
找到 Padding
属性 并将所有值从 3 更改为 0。
方案二(在运行时):
向本地变量添加 TRectF
。为其分配 Bounds
和 Inlfate()
的值。修改后的 OnDrawColumnCell()
看起来像这样:
procedure TForm30.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
aRowColor: TBrush;
aNewRectF: TRectF;
begin
aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);
if (StringGrid1.Cells[7, Row] = '1') then
aRowColor.Color := TAlphaColors.Green
else
aRowColor.Color := TAlphaColors.Red;
aNewRectF := Bounds;
aNewRectF.Inflate(3, 3);
Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
aRowColor.free;
end;
两种解决方案的网格如下所示:
要同时删除单元格之间的线条,请取消选中网格 Options
中的 ColLines
和 RowLines
。
我在 Delphi 10.1 的多设备应用程序中遇到问题(在 Windows 上)。
我有一个 StringGrid
(连接到数据库),我可以更改行的背景颜色,但问题是单元格之间有一个 "padding"(在 grey/silver 中)。
在onformCreate
中我定义:
stringgrid1.DefaultDrawing := False;
这是我的代码:
procedure Tlist_form.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var aRowColor: TBrush;
begin
aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha);
if (stringgrid1.Cells[7,row]='1') then
aRowColor.Color := TAlphaColors.Green
else
aRowColor.Color := TAlphaColors.Red;
Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
aRowColor.free;
end;
在 Delphi 6 我从来没有遇到过这个问题,我不知道如何解决它。 谢谢。
解决方案 1(在设计时):
对于每个 StringColumn
找到 Padding
属性 并将所有值从 3 更改为 0。
方案二(在运行时):
向本地变量添加 TRectF
。为其分配 Bounds
和 Inlfate()
的值。修改后的 OnDrawColumnCell()
看起来像这样:
procedure TForm30.StringGrid1DrawColumnCell(Sender: TObject;
const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
aRowColor: TBrush;
aNewRectF: TRectF;
begin
aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);
if (StringGrid1.Cells[7, Row] = '1') then
aRowColor.Color := TAlphaColors.Green
else
aRowColor.Color := TAlphaColors.Red;
aNewRectF := Bounds;
aNewRectF.Inflate(3, 3);
Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
aRowColor.free;
end;
两种解决方案的网格如下所示:
要同时删除单元格之间的线条,请取消选中网格 Options
中的 ColLines
和 RowLines
。