• delphi中如何截取控件消息


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

  • 相关阅读:
    一个小demo的开发日记(二)
    一个小demo的开发日记(一)
    一个小demo的开发日记(〇)
    基本光照与阴影(一)
    图形渲染管线与shader(更新中)
    近期的一些进展ww
    2016-4-10
    2D游戏中常见的碰撞检测处理(仅碰撞体)【持续更新】
    智能车。。一个可以取代二值化操作的比较好用的函数
    C++
  • 原文地址:https://www.cnblogs.com/railgunman/p/1935581.html
Copyright © 2020-2023  润新知