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;
DBGridEH直接支持鼠标滚轮事件
从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好用!
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;
在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好用!