我用的是以下这个方法,但是存在一个现象:在form1里面使用正常,但子窗体用不了,如果在子窗体也加这个代码的话只能用于子窗体,主窗体的鼠标滚动事件没有了.想在此请教以下高手解决方法.我用了DBGrid做了很多工作了,不想换成其它的控件了.在此谢过.  private
   Procedure OnMouseWheel(Var Msg :TMsg;var Handled:Boolean);
    { Private declarations }
  public
    { Public declarations }
  end;Procedure TForm1.OnMouseWheel(Var Msg :TMsg;var Handled:Boolean);
begin
  if Msg.message = WM_MouseWheel then
  begin
    if Msg.wParam > 0 then
     begin
       if DBGrid1.Focused then
         SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEUP,0);
     end
    else
     begin
       if DBGrid1.Focused then
         SendMessage(DBGrid1.Handle,WM_VSCROLL,SB_PAGEDOWN,0);
     end;
    Handled:= True;
  end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnMessage:=OnMouseWheel;
end; 

解决方案 »

  1.   

    算了,助人为快乐之本
     if  (Msg.message=WM_MOUSEWHEEL) and ((Screen.ActiveForm.ActiveControl is TDBGrid)) then
          begin
              if   Msg.wParam >0   then
                 SendMessage(Screen.ActiveForm.ActiveControl.Handle,WM_KEYDOWN,VK_UP,0)
              else
                 SendMessage(Screen.ActiveForm.ActiveControl.Handle,WM_KEYDOWN,VK_DOWN,0);
              Handled:=True;
          end;
      

  2.   

    对不起哈,最近没怎么上CSDN,谢谢上面这位仁兄了,马上结贴去!