在Delphi中随意控制DBGrid每一行的颜色 请求帮助:我想通过Qry.next的方法移动DBGrid的当前行,希望达到当前行的字体和背景颜色变化,其他的行保持原有的基本配色显示,但是我没有成功,还请指教!
pplucode变量是在Query的Aftscroll时间里面定义的:
pPlucode:=Qry1.Fieldbyname('plucode').Asstring;下面是表格颜色:
procedure TfrmGoodCheck.dgrdCheckDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);begin if qryCheck.FieldByName('plucode').AsString=pPlucode then begin dgrdCheck.Canvas.Font.size := 16 ; dgrdCheck.Canvas.Brush.color:=clsilver; end else begin dgrdCheck.Canvas.Font.size := 12; dgrdCheck.Canvas.Brush.color:=clWindowFrame; end; dgrdCheck.DefaultDrawColumnCell(Rect,DataCol,Column,State);end;
运行结果:
移动键盘运行Query.next的时候,经过的所有表格的记录都变成大字,当所有的现实都是大字后,移动当前记录就会发生当前记录表成小字体。
pplucode变量是在Query的Aftscroll时间里面定义的:
pPlucode:=Qry1.Fieldbyname('plucode').Asstring;下面是表格颜色:
procedure TfrmGoodCheck.dgrdCheckDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);begin if qryCheck.FieldByName('plucode').AsString=pPlucode then begin dgrdCheck.Canvas.Font.size := 16 ; dgrdCheck.Canvas.Brush.color:=clsilver; end else begin dgrdCheck.Canvas.Font.size := 12; dgrdCheck.Canvas.Brush.color:=clWindowFrame; end; dgrdCheck.DefaultDrawColumnCell(Rect,DataCol,Column,State);end;
运行结果:
移动键盘运行Query.next的时候,经过的所有表格的记录都变成大字,当所有的现实都是大字后,移动当前记录就会发生当前记录表成小字体。
在dbgrid的onDrawColumnCell中加入如下段落:
with dbgrid do
begin
if (state=[gdselected]) or (state=[gdselected,gdfocused])) then
begin
canvas.font.color:=clyellow;
canvas.brush.color:=clnavy;
end
else begin
if (sender as tdbgrid).datasource.dataset.RecNo mod 2<>0 then
Canvas.brush.Color :=ClWhite
else
Canvas.brush.Color :=CLAqua;
end;
end;
dbgrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);
procedure Tfrm.Grid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin if (grid1.DataSource.DataSet.RecNo mod 2=0) then
grid1.Canvas.Brush.Color :=$00DDFFFF
else
grid1.Canvas.Brush.Color :=clwhite;
grid1.Canvas.Font.Size :=9;
If ((State = [gdSelected]) or (State=[gdSelected ,gdFocused])) then
If Not Grid1.SelectedRows.CurrentRowSelected then
begin
Grid1.Canvas.Brush.Color:=$00FF2F97;
grid1.Canvas.Font.Color :=clwhite;
grid1.Canvas.Font.Size :=12
end;
grid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
在申明中添加如下一行代码(为了使用DataLink属性)
TCustomDBGridCracker = class(TCustomDBGrid);procedure TfrmGoodCheck.dgrdCheckDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin with TCustomDBGridCracker(sender) do begin
if DataLink.ActiveRecord = Row-1 then
begin
Canvas.Brush.Color:=clsilver;
Canvas.Font.size := 16 ;
end; DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
end;