3种方法:1:继承生成新类,直接继承!2:Application.OnMessage:=ApplicationMessage;procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean); begin if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) then begin //处理程序 end else inherited; end;3:窗体子类化 function SubClassWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LResult;stdcall; begin if Msg = WM_MOUSEWHEEL then begin //处理程序 Result := 0; end else begin Result := CallWindowProc(Pointer(i),Form1.Button1.handle,Msg,WParam,LParam); end; end;i:=GetWindowLong(Button1.Handle,GWL_WNDPROC); SetWindowLong(Button1.Handle,GWL_WNDPROC,Longint(@SubClassWndProc));SetWindowLong(Handle,GWL_WNDPROC,LongInt(Pointer(i)));//恢复至于向上还是向下,判断Msg.wParam
ehom(?!) 第一种,我已经解决了,但麻烦, 第二种,第三中,不大明白, Application.OnMessage:=ApplicationMessage; if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) 这两句话有问题吧,其实我的要求是 当DBgrid 获得焦点是,滚动鼠标的轮子, dBgrid 中的记录也上下滚动,
ehom(?!) 小弟对delphi 中的消息机制不怎么熟,告示我具体怎么做,谢谢
Application.OnMessage:=ApplicationMessage; 将程序的所有消息将给过程ApplicationMessage处理!定义过程 procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean); begin if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) then//当接收到消息WM_MOUSEWHEEL,并且由DBGrid1激发时 begin //处理程序 end else inherited; end;窗体子类化可查看我以前回答的一个问题! http://expert.csdn.net/Expert/topic/1213/1213227.xml
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEDOWN,0)
SendMessage(DBGrid.Handle,WM_VSCROLL,SB_LINEUP,0)查看procedure TControl.WMMouseWheel(var Message: TWMMouseWheel);其实从TControl派生的控件时都有,DBGrid没继承而已!
怎样拦截呢,我也不知道代码该写那里;
请告之。
begin
if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) then
begin
//处理程序
end
else
inherited;
end;3:窗体子类化
function SubClassWndProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM):LResult;stdcall;
begin
if Msg = WM_MOUSEWHEEL then
begin
//处理程序
Result := 0;
end
else
begin
Result := CallWindowProc(Pointer(i),Form1.Button1.handle,Msg,WParam,LParam);
end;
end;i:=GetWindowLong(Button1.Handle,GWL_WNDPROC);
SetWindowLong(Button1.Handle,GWL_WNDPROC,Longint(@SubClassWndProc));SetWindowLong(Handle,GWL_WNDPROC,LongInt(Pointer(i)));//恢复至于向上还是向下,判断Msg.wParam
第一种,我已经解决了,但麻烦,
第二种,第三中,不大明白,
Application.OnMessage:=ApplicationMessage;
if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle)
这两句话有问题吧,其实我的要求是 当DBgrid 获得焦点是,滚动鼠标的轮子,
dBgrid 中的记录也上下滚动,
将程序的所有消息将给过程ApplicationMessage处理!定义过程
procedure ApplicationMessage(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message = WM_MOUSEWHEEL) and (Msg.hwnd = DBGrid1.Handle) then//当接收到消息WM_MOUSEWHEEL,并且由DBGrid1激发时
begin
//处理程序
end
else
inherited;
end;窗体子类化可查看我以前回答的一个问题!
http://expert.csdn.net/Expert/topic/1213/1213227.xml
给我一个列子好吗。?我能理解你的意思,但 哎,太菜了。拜托了!
而且,当应用程序中有多个DBGrid时,这怎么做呢?