本人在DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);事件写了如下代码是记录相隔之间有颜色条。
   if (DBGRID1.DataSource.DataSet.RecNo    mod 2 =0) then //  and (p_flag=0) then
   begin
      dbgrid1.Canvas.Brush.color:=16053219;
      dbgrid1.Canvas.font.color:=clblack;
   end;
   dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
在dbgrid1的option中选择selectrow
但在选中有颜色的记录行不象没有颜色记录行那样选中时有深蓝色选中状态,感觉象未选中那样,如何解决。

解决方案 »

  1.   

    在前面判断一下:
    if not (gdSelected in State) then
      if (DBGRID1.DataSource.DataSet.RecNo    mod 2 =0) then 
    ...
      

  2.   

    應該在OnGetCellColor事件上寫﹐例如﹕procedure TOpenExpDlg.grdTradeDecGetCellColor(Sender: TObject; ACol,
      ARow: Longint; AState: TGridDrawState; ABrush: TBrush; AFont: TFont;
      var Highlight: Boolean);
    begin
      if HighLight then
      begin
        HighLight := False;
        ABrush.Color := clSelectedColor;
      end;
      with grdTradeDec.Fields[ACol], AFont do
        case Tag of
          1: Color := clMaroon;
          2: Color := clGreen;
          3: Color := clOlive;
          4: Color := clNavy;
          5: Color := clPurple;
          6: Color := clTeal;
          7: Color := clGray;
          8: Color := clSilver;
        end;
    end;
      

  3.   


    将DefaultDrawing 改为trueif not (gdSelected in State) then
      if (DBGRID1.DataSource.DataSet.RecNo    mod 2 =0) then 
    ...