请问在Delphi 的DBGrid中如何响应鼠标的滚轮的事件?(3D鼠标)

解决方案 »

  1.   


    private-------------窗体的私有位置
     OldGridWnd : TWndMethod;
    procedure NmGridWnd (var Message : TMessage);{实现部分}
    procedure TForm1.NmGridWnd(var Message: TMessage);
    var
     IsNeg : Boolean;
    begin
     if Message.Msg = WM_MOUSEWHEEL then
     begin
       IsNeg := Short(Message.WParamHi) < 0;
       if IsNeg then
         DBGrid1.DataSource.DataSet.MoveBy(1)
       else
         DBGrid1.DataSource.DataSet.MoveBy(-1)
     end
     else
       OldGridWnd(Message);
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     OldGridWnd := DBGrid1.WindowProc ;
     DBGrid1.WindowProc := NmGridWnd;
    end;     
      

  2.   

    DBGridEH直接支持鼠标滚轮事件
      

  3.   

    从Additional面板选择ApplicationEvents1控件添加到Form1上
      
    在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;建议用DBGridEH,比DBGrid好用!