我想截取TDBGrid的消息,不知各高手能否指教。
是所有的吗? procedure MyProc(aHandle: HWND; msg: UINT; wParam: WPARAM; lParam: LPARAM); stdcall; begin .... //记得 CallWindowProc(t, aDBgrid.Handle, msg, wParam, lParam); end; var t: TFARPROC; //全局 begin t := Pointer(GetWindowLong(aDBgrid.Handle, GWL_WNDPROC)); SetWindowLong(aDBgrid.Handle, GWL_WNDPROC, LongInt(@MyProc)); //未经测试 end;
这样做: 先定义函数…… ………… OldWndProc, NewWndProc: Pointer; procedure NewWndMethod (var Msg: TMessage); ………… procedure MyProc(var Message: TMessage); begin .... //记得 CallWindowProc(OldWndProc, aDBgrid.Handle, msg, wParam, lParam); end; 子类化………… ……………… NewWndProc := MakeObjectInstance (NewWndMethod); OldWndProc := Pointer (SetWindowLong ( Form1.Handle, gwl_WndProc, Longint (NewWndProc))); ……………… 最后—…… SetWindowLong (fFormHandle, gwl_WndProc, Longint (OldWndProc)); FreeObjectInstance (NewWndProc);
不会出错呀,我都试过了,试的是 button, 还有我的只能获取标准的 windows 消息,delphi 自定义的不能截取 TControl 有个 WndProc 可用,可以截取所有的消息。 var 在 form 中 : oldProc: TWndMethod; procedure MyProc(var Message: TMessage); 然后 oldProc := aDBgrid.WndProc; aDBGrid.WndProc := MyProc; procedure MyProc(var Message: TMessage); begin if Message.msg = WM_RBUTTONDOWN then ShowMessage('ok'); oldProc(Message);//一定不要忘了。 end; 我用的是 button 做的测试,完全可以。 来源:http://www.delphibbs.com/delphibbs/dispq.asp?lid=260248
|
请发表评论