在一个多设备应用程序中(在Windows上),Delphi10.1有一个问题。我有一个StringGrid (连接到db),我可以更改行的背景色,但问题是在单元格之间有一个“填充”(灰色/银色)。
在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中,我从来没有遇到过这个问题,我也不知道如何解决它。谢谢。
发布于 2017-01-25 16:01:45
解决方案1(设计时):
对于每个StringColumn,定位Padding属性并将所有值从3更改为0。
解决方案2(运行时):
向本地vars添加一个TRectF。将Bounds和Inlfate() it的值分配给它。修改后的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;两种解决方案的网格看起来都是这样的:

若要移除单元格之间的线,请取消ColLines和RowLines在网格Options中的勾选。
https://stackoverflow.com/questions/41854676
复制相似问题