想要一列的顏色為灰色,但是得到焦點後,又變成了白色.......怎樣才能一直為灰色?............請指教

解决方案 »

  1.   

    procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if column.fieldName = 'salary' then  //根据某个字段的值控制dbgrid1
                                          //的颜色
      begin
        if column.field.asFloat > 50000.0 then
        begin
          dbgrid1.canvas.Brush.Color := clGray;  //工资大于50000.0的变为灰色
          
          if gdFocused in State then
            dbgrid1.canvas.Font.Color := clWhite;  //获得焦点 
        end;
      end;  dbgrid1.DefaultDrawColumnCell(Rect, DataCol,Column,State);
    end;
      

  2.   

    {1.DBGridColumnColor(给DBGrid隔行着色,在DBGrid的OnDrawColumnCell事件中调用)}procedure DBGridColumnColor(Sender: TObject;const Rect: TRect;
              DataCol: Integer; Column: TColumn;State: TGridDrawState;
              singlecolor:TColor;doublecolor:TColor;selectedcolor:TColor);
    var
      dataset:tdataset;
      dbgrid:tdbgrid;
    begin
      dataset:=TDBGrid(Sender).DataSource.DataSet;
      dbgrid:=TDBGrid(Sender);
      if (dataset.Recno mod 2) <> 0 then  //隔行
         begin
           dbgrid.Canvas.Font.Color := clWhite;
           dbgrid.Canvas.Brush.Color := singlecolor;  //这里设置单元格填充色
           dbgrid.Canvas.FillRect(Rect);  //这里对相应的单元格进行背景色填充
        end
      else
        begin
          dbgrid.Canvas.Font.Color := clWhite;
          dbgrid.Canvas.Brush.Color :=doublecolor;
          dbgrid.Canvas.FillRect(Rect);
        end;  //输出内容
      dbgrid.Canvas.TextRect( Rect, Rect.Left, Rect.Top, Column.Field.DisplayText);
      if gdSelected in State then  //被选中行的颜色
      begin
        dbgrid.Canvas.Brush.Color :=selectedcolor;
        dbgrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    end;