目前有两种方法
1.GetWindowLong and SetWindowLong
优点:不用修改Form的属性,可以使用Form.WindowProc := NewWindowProc
在此基础上再挂接新的窗口进程
缺点:好像只能截获Win32消息,无法截获VCL的消息2.Form.WindowProc
优点:可截获VCL的消息
缺点:需要修改Form的属性,使用Form.WindowProc := NewWindowProc
将会使窗口进程替代无效有什么方法可以解决吗?
1.GetWindowLong and SetWindowLong
优点:不用修改Form的属性,可以使用Form.WindowProc := NewWindowProc
在此基础上再挂接新的窗口进程
缺点:好像只能截获Win32消息,无法截获VCL的消息2.Form.WindowProc
优点:可截获VCL的消息
缺点:需要修改Form的属性,使用Form.WindowProc := NewWindowProc
将会使窗口进程替代无效有什么方法可以解决吗?
重载Form.WindowProc
某些消息是通过Broadcast传递的,这些没有办法获得。
所以应该钩子也不行。
我写过一个form的进度条,就是主要用上面的二个api,不过参数的类型一定要注意。窗口过程我喜欢!
vcl内部的所谓“消息”,根本就不是消息!他通过perform分发的“消息”,这跟windows消息不是一个概念,它是通过tcontrol的dispatch找到相应的处理函数,根本不是twincontrol,没有句柄,怎么会有窗口呢?
没有窗口怎么向系统注册消息处理含数?没有注册消息处理含数getwindowlong和setwindowlong怎么能够好使呢?这是我的浅薄理解。