在DBGrid 上如何利用 鼠标滑轮 浏览记录?
谢谢!!!

解决方案 »

  1.   

    unit DBGrid1;interfaceuses
      Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;type
      TDBGrid1 = class(TDBGrid)
      protected
        function DoMouseWheel(Shift : TShiftState; WheelDelta : Integer;
          MousePos : TPoint) : Boolean; override;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('SPA', [TDBGrid1]);
    end;
    { TDBGrid1 }function TDBGrid1.DoMouseWheel(Shift : TShiftState; WheelDelta : Integer;
      MousePos : TPoint) : Boolean;
    Var FKey : Word;
    begin
      Result := inherited DoMouseWheel(Shift, WheelDelta, MousePos);
      if WheelDelta < 0 then FKey := VK_DOWN
      else FKey := VK_UP;
      KeyDown(FKey, []);
      Refresh;
    end;end.原文出自DELPHIBBS
      

  2.   

    请问上面这一段程序是写在一个单元内,然后哪个窗体用到DBGrid时,再调用这个单元吗???
      

  3.   

    这是一个新组件,继承DBgrid的,向其他控件一样,直接拖拽就可以了
      

  4.   

    定義:type
      TWheelDBGrid = class(DBGrids.TDBGrid)      
      private
        FWheelWnd : TWndMethod;
        procedure MouseWheelWnd (var Message : TMessage);
      public
        constructor Create(AOwner : TComponent);override;
      end;{ TWheelDBGrid }constructor TWheelDBGrid.Create(AOwner: TComponent);
    begin
      inherited;
      Self.FWheelWnd:=Self.WindowProc;
      Self.WindowProc:=MouseWheelWnd;
    end;procedure TWheelDBGrid.MouseWheelWnd(var Message: TMessage);
    var
      IsNeg : Boolean;
    begin
      if Message.Msg = WM_MOUSEWHEEL then
      begin
        IsNeg := Short(Message.WParamHi) < 0;
        if IsNeg then
          self.DataSource.DataSet.MoveBy(1)
        else
          self.DataSource.DataSet.MoveBy(-1)
      end else
        Self.FWheelWnd(Message);
    end;引用:
    TDBGrid = class(TWheelDBGrid);這個方法可以不重新寫組件,直接引用就可以了.
      

  5.   

    把上面这一段程序是写在一个单元内,然后哪个窗体用到DBGrid时,再在Uses里引用这个单元吗???
      

  6.   

    也可以这样:从Additional面板选择ApplicationEvents1控件
    再他的onMessage事件里
    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
    var Handled: Boolean);
    begin
      if (DBGrid1.Focused) And (Msg.message = WM_MOUSEWHEEL) then
      begin
      if Msg.wParam > 0 then
        SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_UP, 0)
      else
        SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_DOWN, 0);
      Handled := True;
      end;
    end;
      

  7.   

    定義:type
      TWheelDBGrid = class(DBGrids.TDBGrid)      
      private
        FWheelWnd : TWndMethod;
        procedure MouseWheelWnd (var Message : TMessage);
      public
        constructor Create(AOwner : TComponent);override;
      end;{ TWheelDBGrid }constructor TWheelDBGrid.Create(AOwner: TComponent);
    begin
      inherited;
      Self.FWheelWnd:=Self.WindowProc;
      Self.WindowProc:=MouseWheelWnd;
    end;procedure TWheelDBGrid.MouseWheelWnd(var Message: TMessage);
    var
      IsNeg : Boolean;
    begin
      if Message.Msg = WM_MOUSEWHEEL then
      begin
        IsNeg := Short(Message.WParamHi) < 0;
        if IsNeg then
          self.DataSource.DataSet.MoveBy(1)
        else
          self.DataSource.DataSet.MoveBy(-1)
      end else
        Self.FWheelWnd(Message);
    end;引用:
    TDBGrid = class(TWheelDBGrid);上面这一段程序怎样使用呀,能说详细些吗???
    我把上面这一段程序是写在一个单元内,然后哪个窗体用到DBGrid时,再在Uses里引用这个单元,可是没什么反应呀!!!请高手指点!!!