怎么实现让DBGRID显示的行纪录随着鼠标的移动改变显示颜色?谢谢~就是想现在有些网页上面用的表格里面,鼠标在纪录集上面移动的时候,相应行的纪录就改变颜色~看起来很舒服~请问dbgrid可以有这个功能么?drawcolumncell需要一个rect一个column,怎么通过鼠标的位子知道前面两个参数呢?

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
      var s :string;
    begin
     s:=dbgrid1.SelectedField.AsString;
    if gdSelected in State then begin
    dbgrid1.Canvas.Brush.Color:=clred;
     (Sender as TDBGrid).Canvas.FillRect(Rect);
     (Sender as TDBGrid).Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2,s);
      end;
       end;
      

  2.   

    to jackie168(花好月圓)
    谢谢~
    我说的是mousemove事件,不是选择一个单元格后那行变颜色~
    我测试一下,如果你的这个不行,还请继续帮忙了~
      

  3.   

    http://blog.csdn.net/whbo/articles/232420.aspx
      

  4.   

    申明两个全局变量X,Y :integer 或 一个TPoint变量 在OnMouseMove事件中记录当前鼠标的位置。记录完了以后调用DBGrid.Repaint函数。在OnDrawDataCell中,判断当前鼠标的位置是否在Rect中,如果在重画。
    例子:
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    var
      pt :TPoint;
    begin
      pt.X := self.X;
      pt.Y := self.Y;  if PtInRect(Rect,pt) then
      begin
        dbgrid1.Canvas.Brush.Color := clRed;
        dbgrid1.DefaultDrawDataCell(Rect,Field,State);
      end;
    end;procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      self.X := X;
      self.Y := Y;
      Dbgrid1.Repaint;
    end;
      

  5.   

    private
        { Private declarations }
      public
      x,y:integer;  //全局变量
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
       self.X := X;
      self.Y := Y;
      Dbgrid1.Repaint;
    end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      pt :TPoint;
     begin
      pt.X := self.X;
      pt.Y := self.Y;  
      if PtInRect(Rect,pt) then
      begin
        dbgrid1.Canvas.Brush.Color := clRed;
        dbgrid1.DefaultDrawDataCell(Rect,Column.Field,State);
      end;
      end;end.
      

  6.   

    (1)设置DBGrid的Options属性中的dgRowSelect为True。
    (2)定义一个新类。代码如下:
    type
      THackDBGrid = class(TDBGrid);
    (3)在DBGrid的OnMouseMove事件处理程序中,写如下的代码:
    procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      gc: TGridCoord;
    begin
      gc:= DBGrid1.MouseCoord(X, Y);
      if (gc.X >= 0) and (gc.Y > 0) then
        DBGrid1.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(DBGrid1).Row);
    end;
    (4)编译,运行!