在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的时候,经过的所有表格的记录都变成大字,当所有的现实都是大字后,移动当前记录就会发生当前记录表成小字体。

解决方案 »

  1.   

    答案:
    在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);
      

  2.   

    试一下下面的代码,看看能不能满足需要:
    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;
      

  3.   

    帮你改了一下代码,试一下:
    在申明中添加如下一行代码(为了使用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;
      

  4.   

    http://expert.csdn.net/Expert/topic/1144/1144721.xml?temp=.544491如果当前行的记录的表格变宽?那麼我得到的結果是整個表格的都變寬了,參考語名: Tstringgrid(dbgrid2).DefaultRowHeight:=25;   //設定行的高度