delphi中如何截取控件消息(200分)

  • 主题发起人 主题发起人 canson
  • 开始时间 开始时间
C

canson

Unregistered / Unconfirmed
GUEST, unregistred user!
; 我想截取TDBGrid的消息,不知各高手能否指教。
 
我知道可以用wndproc,但具体怎用,可否提供原代码?
 
是所有的吗?
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;
 
mail 一个参考给你
 
谢谢大家的踊跃回应,我将进一步尝试。
 
我试过SuperMMX的方法,可是不行呀,提示出错。
 
这样做:
先定义函数……
…………
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);


 
可以用message WM_xxx 吗?
 
还是不行,可以有个完整的原程序吗?
 
不会出错呀,我都试过了,试的是 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 做的测试,完全可以。
 
多人接受答案了。
 
后退
顶部