• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi中如何截取控件消息

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我想截取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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Matlab中的组合函数发布时间:2022-07-18
下一篇:
matlab 自定义函数及调用发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap