写一函数,你参考:procedure TForm1.ColoredDBGrid1 DRawColoredDBGrid (Sender: TObject; Field: TField; var Color: TColor; var Font: TFont); var p: Integer; begin p := Table1.FindField('wage').AsInteger; //取得当前记录的Wage字段的值。 if (p > 500) then begin //程序将根据wage值设置各行的颜色。 Color := clGreen; Font.Style := [fsItalic]; //不仅可以改变颜色,还可以改变字体 end; if (p >= 500) and (p < 800) then Color := clRed; if (p >= 800) then begin Color := clMaroon; Font.Style := [fsBold]; end; end;
procedure TCardQueryForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var field :TField; dataset :TDataSet; important:string; ishow:integer; begin dataset := DBGrid1.DataSource.DataSet; field:=dataset.FieldByName('seqno'); important:=field.AsString; ishow :=StrtoInt(important); if ishow<=10 then begin DBGrid1.Canvas.Font.Color:=clRed; end else if ishow<=20 then begin DBGrid1.Canvas.Font.Color:=clBlue; end else if ishow<=30 then begin DBGrid1.Canvas.Font.Color:=clGreen; end else begin DBGrid1.Canvas.Font.Color:=clYellow; end; DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state); end;改变选中行颜色: 先将dbgrid的dgrowselected属性设为true;然后在dbgrid的DrawColumnCel事件里写: procedure TFrmQuery.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in state then dbgrid1.Canvas.Brush.Color:=clgreen; dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);end; 不同内容显示不同颜色: procedure TFrmDetail.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var s:string; begin s:=frmmain.adoquery2.FieldByName('状态').AsString; if s='停发' then DBGrid1.Canvas.Font.Color:=clRed else if s='已发' then DBGrid1.Canvas.Font.Color:=clGreen; DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (not (state=[gdFocused])) then begin if (not (state=[gdSelected])) or (not (self.ActiveControl=dbgrid1)) or (not self.Active) then begin with adoquery1 do begin if uppercase(Column.FieldName)=uppercase('TEST') then begin if fieldbyname('TEST').AsString<>adoquery2.fieldbyname('TEST').AsString then begin dbgrid1.Canvas.brush.Color :=$00FEF3DE; dbgrid1.Canvas.Font.Color:=clred; end; end; dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
(Sender: TObject; Field: TField; var Color:
TColor; var Font: TFont);
var
p: Integer;
begin
p := Table1.FindField('wage').AsInteger;
//取得当前记录的Wage字段的值。
if (p > 500) then
begin
//程序将根据wage值设置各行的颜色。
Color := clGreen;
Font.Style := [fsItalic];
//不仅可以改变颜色,还可以改变字体
end;
if (p >= 500) and (p < 800) then
Color := clRed;
if (p >= 800) then
begin
Color := clMaroon;
Font.Style := [fsBold];
end;
end;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
field :TField;
dataset :TDataSet;
important:string;
ishow:integer;
begin
dataset := DBGrid1.DataSource.DataSet;
field:=dataset.FieldByName('seqno');
important:=field.AsString;
ishow :=StrtoInt(important);
if ishow<=10 then
begin
DBGrid1.Canvas.Font.Color:=clRed;
end
else if ishow<=20 then
begin
DBGrid1.Canvas.Font.Color:=clBlue;
end
else if ishow<=30 then
begin
DBGrid1.Canvas.Font.Color:=clGreen;
end else
begin
DBGrid1.Canvas.Font.Color:=clYellow;
end;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);
end;改变选中行颜色:
先将dbgrid的dgrowselected属性设为true;然后在dbgrid的DrawColumnCel事件里写:
procedure TFrmQuery.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
if gdSelected in state then
dbgrid1.Canvas.Brush.Color:=clgreen;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);end;
不同内容显示不同颜色:
procedure TFrmDetail.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
s:string;
begin
s:=frmmain.adoquery2.FieldByName('状态').AsString;
if s='停发' then DBGrid1.Canvas.Font.Color:=clRed
else if s='已发' then DBGrid1.Canvas.Font.Color:=clGreen;
DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);end;
Grid.Canvas.Brush.Color := BrshClrOdd // 奇数行颜色
else
Grid.Canvas.Brush.Color := BrshClrEven; // 偶数行颜色
在query或table
DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
if (adoquery1.RecNo mod 2) = 0 then
Grid.Canvas.Brush.Color := BrshClrOdd // 奇数行颜色
else
Grid.Canvas.Brush.Color := BrshClrEven; // 偶数行颜色
DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (not (state=[gdFocused])) then
begin
if (not (state=[gdSelected])) or (not (self.ActiveControl=dbgrid1)) or (not self.Active) then
begin
with adoquery1 do
begin
if uppercase(Column.FieldName)=uppercase('TEST') then
begin
if fieldbyname('TEST').AsString<>adoquery2.fieldbyname('TEST').AsString then
begin
dbgrid1.Canvas.brush.Color :=$00FEF3DE;
dbgrid1.Canvas.Font.Color:=clred;
end;
end;
dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;