想实现一个DBGrid的自画组件,能根据设定的颜色,隔行显示不同的颜色,各位老大有没有示例代码,分数一定及时奉上!!

解决方案 »

  1.   

    问问题之前先搜索一下吧,你这个问题至少有一千个人问过了也许还不止,procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin      if  Dbgrid1.DataSource.DataSet.RecNo  mod 2=0 then
         begin
              DBGrid1.Canvas.Brush.Color:=$00eaeaea;
              DBGrid1.Canvas.FillRect(rect);
              DBGrid1.Canvas.font.color:=clblack;
         end
         else
         begin
              DBGrid1.Canvas.Brush.Color:=clwhite;
              DBGrid1.Canvas.FillRect(rect);
              DBGrid1.Canvas.font.color:=clblack;
         end;
        if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
         begin
              DBGrid1.Canvas.Brush.Color:=clinfobk;
              DBGrid1.Canvas.FillRect(rect);
              DBGrid1.Canvas.font.color:=clblack;
         end;
         DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state);
     
      

  2.   

    DBGrid 的 DrawColumnCell 事件procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      with DBGrid1.Canvas do
      begin
        if DBGrid1.DataSource.DataSet.RecNo mod 2 = 0 then
          DBGrid1.Canvas.Brush.Color:= clBackground //偶数行颜色
        else DBGrid1.Canvas.Brush.Color := clOlive; //奇数行颜色
      end;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  3.   

    但我提示你,在DELPHI7上这两段代码都是不能用的
      

  4.   

    直接使用InfoPower的wwDBGrid可以实现这种斑马线的效果,不用写任何代码。
      

  5.   

    做成frames吧,这样又好用,又不必做成控件那么麻烦