目前有两种方法
1.GetWindowLong and SetWindowLong
优点:不用修改Form的属性,可以使用Form.WindowProc := NewWindowProc
在此基础上再挂接新的窗口进程
缺点:好像只能截获Win32消息,无法截获VCL的消息2.Form.WindowProc
优点:可截获VCL的消息
缺点:需要修改Form的属性,使用Form.WindowProc := NewWindowProc
将会使窗口进程替代无效有什么方法可以解决吗?

解决方案 »

  1.   

    好像只能截获Win32消息,无法截获VCL的消息?????可以截获的阿
      

  2.   

    无法截获VCL消息?不会吧,VCL在Win32之上啊
      

  3.   

    只要做一件事情可以解决你的两个问题:
    重载Form.WindowProc
      

  4.   

    的确无法截获VCL消息,在Borland新闻组上得到的结论。
    某些消息是通过Broadcast传递的,这些没有办法获得。
    所以应该钩子也不行。
      

  5.   

    用他GetWindowLong and SetWindowLong
    我写过一个form的进度条,就是主要用上面的二个api,不过参数的类型一定要注意。窗口过程我喜欢!
      

  6.   

    给分了,只有WindowProc可以解决,其他的都没有办法。
      

  7.   

    只有重载能够解决的原因是:
    vcl内部的所谓“消息”,根本就不是消息!他通过perform分发的“消息”,这跟windows消息不是一个概念,它是通过tcontrol的dispatch找到相应的处理函数,根本不是twincontrol,没有句柄,怎么会有窗口呢?
    没有窗口怎么向系统注册消息处理含数?没有注册消息处理含数getwindowlong和setwindowlong怎么能够好使呢?这是我的浅薄理解。