gpt4 book ai didi

delphi - DBGrid - 如何设置单独的背景颜色?

转载 作者:行者123 更新时间:2023-12-03 15:49:25 25 4
gpt4 key购买 nike

我正在使用 Delphi 10.2.3 并且想要更改 DBgrid 的背景颜色。例如,我有一个文本列和一个整数列。根据文本,如果值非零,我想更改整数单元格(同一行中)的颜色。

我得到了一些想法 how to color DBGrid special cell?所以我知道如何更改 OnDrawColumnCell 中单元格的颜色。我可以更改文本的背景。但我仍然不知道如何改变另一个单元格的颜色。当然,这非常简单,而且我对显而易见的事情视而不见。

最佳答案

下面的代码显示了如何根据单元格的背景颜色更改单元格的背景颜色同一网格行中另一列的值。

procedure TForm1.FormCreate(Sender: TObject);
var
AField : TField;
begin
AField := TIntegerField.Create(Self);
AField.FieldKind := fkData;
AField.FieldName := 'ID';
AField.DataSet := ClientDataSet1;

AField := TStringField.Create(Self);
AField.FieldKind := fkData; // Field size defaults to 20
AField.FieldName := 'AValue';
AField.DataSet := ClientDataSet1;

ClientDataSet1.CreateDataSet;
ClientDataSet1.InsertRecord([1, 'One']);
ClientDataSet1.InsertRecord([2, 'Two']);
ClientDataSet1.InsertRecord([3, 'Three']);

DBGrid1.DefaultDrawing := False; // otherwise DBGrid1DrawColumnCell will have no effect
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Index = 1 then begin
if Odd(DBGrid1.Columns[0].Field.AsInteger) then
DBGrid1.Canvas.Brush.Color := clGreen;
end;
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;

如果您想根据未显示的值确定单元格颜色字段(没有网格列的字段)您可以简单地测试该字段的值在底层数据集中,因为逻辑数据集游标始终是同步的当前正在绘制的单元格。例如

    if Odd(DBGrid1.DataSource.DataSet.Fields[99].AsInteger) then
DBGrid1.Canvas.Brush.Color := clGreen;

关于delphi - DBGrid - 如何设置单独的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57267946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com