DBGrid支持鼠标滚轮滚动的解决办法
方法一:
在窗体添加一个TApplicationEvents组件(在Additional中),然后在它的OnMessage事件中添加如下代码:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin // 当在 DBGrid1 上发生鼠标滚轮事件时 if (DBGrid1.Focused) And (Msg.message = WM_MOUSEWHEEL) then begin if Msg.wParam > 0 then // 滚轮上滚 SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_UP, 0) // 向DBGrid1发送 VK_UP按键消息 else // 下滚 SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_DOWN, 0); Handled := True; // 消息已经处理完毕 end; end;
DBGrid1表示需要响应滚轮事件的DBGrid名,这样就能顺利解决滚轮支持的问题。
方法二:
首先在窗体定义前面新写一个类,继承于DBGrids.TDBGrid,添加一个DoMouseWheel的函数,如下:
type TDBGrid=class(DBGrids.TDBGrid) public function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override; end; TFormMain = class(TForm) //....省略 end; var FormMain: TFormMain; implementation {$R *.dfm} //....其他省略 { TDBGrid } function TDBGrid.DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; begin if WheelDelta < 0 then DataSource.DataSet.Next; if wheelDelta > 0 then DataSource.DataSet.Prior; end; end.
如此也能解决滚轮问题,但是个人觉得还是前一种方法比较好。