function NewWindowProc(WindowHandle:hWnd;
TheMessage:WParameter;
ParamW:WParameter;
ParamL:LParameter):LongInt
{$IFDEF WIN32}stdcall;{$ELSE};export;{$ENDIF}
begin
//在这里处理您自己的消息
if TheMessage=WM_VSCROLL then begin
showmess('垂直滚动条正在滚动!');
end;
NewWindowProc:=CallWindowProc(OldWindowProc,
WindowHandle,
TheMessage,
ParamW,
ParamL);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//为控件指定新的窗口过程,并且记住老的窗口过程的地址
OldWindowProc:=Pointer(SetWindowLong(Dbgrid1.Handle,
GWL_WNDPROC,
LongInt(@NewWindowProc)));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SetWindowLong(dbgrid1.Handle,
GWL_WNDPROC,
LongInt(OldWindowProc));
end;
procedure Tform1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (DBGrid.Focused) And (Msg.message = WM_MOUSEWHEEL) then
begin
if Msg.wParam > 0 then
SendMessage(DBGrid.Handle, WM_KEYDOWN, VK_UP, 0)
else
SendMessage(DBGrid.Handle, WM_KEYDOWN, VK_DOWN, 0);
Handled := True;
end;
end;