我知道在VB里面的HFlexGrid控件可以对任何单元格着色,DELPHI的DBGrid可以做到这一点吗?如果可以,怎么做?
谢谢

解决方案 »

  1.   

    我知道的是每行每列可以控制颜色,具体到每个单元格还没试过。
    每列:可在双击dbgrid,添加显示列,选中一列,从 color属性改颜色
    每行:
      procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
            DataCol: Integer; Column: TColumn; State: TGridDrawState);
        if adotable1.fieldbyname('id').asinteger mod 2=0 then
         begin
           dbgrid1.canvas.font.color:=clblue;
           dbgrid1.canvas.brush.color:=clgrasientActivecaption;
         end;
         dbgrid1.DefaultDrawColumnCell(Rect,datacol,column,State);
    end;实现隔行显示
      

  2.   


    在DBGrid1DrawColumnCell()事件中对任何选中的单元格着色 if gdselected in state then  //判断该单元格是否选中
      begin
        dbgrid1.Canvas.Brush.Color:=clred;  //着色
      end;
      

  3.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      with TDBGrid(Sender) do
      begin
        case Self.ADOQuery1.RecNo Mod 2 of
          0: Canvas.Brush.Color :=clMoneyGreen;
          1: Canvas.Brush.Color :=clWindow;
        end;
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
      end;
    end;可以揭贴了!
      

  4.   

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    begin        //例如
      if Field.Name='价格'  then
      begin
        if Field.AsInteger>500 then
          dbgrid1.Canvas.Brush.Color:=clred
        else
          dbgrid1.Canvas.Brush.Color:=clGreen;
      end;
      DefaultDrawColumnCell(Rect,DataCol,Column,State);end;