DBGrid1.OnDrawColumnCell去设置Column

解决方案 »

  1.   

    DBGrid1.columns[0].Color:=clRed;
    DBGrid1.columns[1].Color:=clGreen;
      

  2.   

    to  回复人: yzykjh(yzykjh)  
        在DBGrid1.OnDrawColumnCell能设置每一行或每一列的颜色,但具体每一个网格我没有设置过,能给具体的程序看一下吗?望赐教。 
      

  3.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);begin
      //第二行第四列颜色为红色
      //修改一下adoquery1为你自己的记录集
      //如table,adotable,adodataset,query都可以
      if (datacol=3) and (adoquery1.recno=2) then
          DbGrid1.Canvas.Brush.color:=rgb(225,0,0);  DbGrid1.Canvas.pen.mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);end;
      

  4.   

    to 回复人: zhaojinghui(撒哈拉之雨的悲伤) 
       在DBGrid1.OnDrawColumnCell能设置每一行或每一列的颜色,但具体每一个网格我没有设置过,能给具体的程序看一下吗?望赐教。
      

  5.   

    to  回复人: zdcnow(磁效应)  
        我用的是table.
        我所实现的目的是使某一例中的每一个网格的颜色为所设置的颜色,但由于记录随时增加,固实现起来不是很方便。能有很好的方法实现吗?
      

  6.   

    procedure TfrmTreeBaseEdit.DbGdMainDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    beginwith DbGdMain do
      begin
      if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
        begin
               Canvas.Font.Color :=ClYellow;
               Canvas.Brush.Color :=ClNavy;
           end
           else
           begin
             if  dsEditSource.DataSet.RecNo mod 2<> 0 then begin {判断当前数据是奇数还是偶数行}
              Canvas.brush.Color :=ClWhite;     {如果是奇数行,DBGrid背景以白色显示}
             end
             else begin
               Canvas.brush.Color :=$00EAEAEA;      {如果是偶数行,DBGrid背景以浅灰色显示}
             end;       end;
           DefaultDrawColumnCell(Rect, DataCol, Column, state );
      end;
    end;
      

  7.   

    给你一个例子,使每行颜色不同:
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    if Table1.FieldByName('size').AsInteger >=40 then
      begin
      DBGrid1.Canvas.Font.Color := clRed;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    if (Table1.FieldByName('size').AsInteger >=30) and (Table1.FieldByName('size').AsInteger<40) then
      begin
      DBGrid1.Canvas.Font.Color := clBlue;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    if (Table1.FieldByName('size').AsInteger >=20) and (Table1.FieldByName('size').AsInteger<30) then
      begin
      DBGrid1.Canvas.Font.Color := clYellow;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    if (Table1.FieldByName('size').AsInteger >=10) and (Table1.FieldByName('size').AsInteger<20) then
      begin
      DBGrid1.Canvas.Font.Color := clLime;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    end;end.
      

  8.   

    procedure TForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      x,y:integer;
    begin
        x:=(acol-stringgrid1.LeftCol)*73+28;
        y:=(arow-stringgrid1.TopRow+1)*21+2;
      if (acol>0) and (arow>0) and
        not ([gdselected]<=state) then
      begin
        case Form1.Table.fieldstrclist[acol].fieldtype of
        'C':
          stringgrid1.Canvas.Font.Color:=clblack;
        'N':
          stringgrid1.Canvas.Font.Color:=clblue;
        'L':
          stringgrid1.Canvas.Font.Color:=clred;
        'D':
          stringgrid1.Canvas.Font.Color:=clfuchsia;
        end;
        stringgrid1.Canvas.TextRect(rect,x,y,
          stringgrid1.cells[acol,arow]);
      end;
    end;
      

  9.   

    to OK001() :
    既然已经可以实现控制每个单元格了,那么
    加上一些对recno和datacol 的判断就可以啊,比如recno mod 10 ...这些条件.
      

  10.   

    搂住还不明白吗?通过arol,arow两个变量控制Canvas.Font.Color
    procedure TForm.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var
      x,y:integer;
    begin
        x:=(acol-stringgrid1.LeftCol)*73+28;
        y:=(arow-stringgrid1.TopRow+1)*21+2;
        case acol of
        1:
          case arow of
          1: ...
          2: ...
          else  ....
          end;     
        2:
          ... ...
        end;
        stringgrid1.Canvas.TextRect(rect,x,y,
          stringgrid1.cells[acol,arow]);
    end;