C
ChenBoy
Unregistered / Unconfirmed
GUEST, unregistred user!
还是关于流
上次在你的提供的链接
http://delphi.mychangshu.com/data/%CC%B8Delphi%B1%E0%B3%CC%D6%D0%A1%B0%C1%F7%A1%B1%B5%C4%C0%FB%D3%C3.htm
中,有一问题我还是不知道怎么去做,请教一下:
Part:实际应用之三:利用流制作自己的OICQ
Question:
OICQ使用的是UDP协议,这是一种无连接协议,即通信双方不用建立连接就可以发送信
息,所以效率比较高。Delphi本身自带的FastNEt公司的NMUDP控件就是一个UDP协议的用户
数据报控件。不过要注意的是如果你使用了这个控件必须退出程序才能关闭计算机,因为
TNMXXX控件有BUG。所有nm控件的基础 PowerSocket用到的ThreadTimer,用到一个隐藏的
窗口(类为TmrWindowClass)处理有硬伤。
出问题的地方:
Psock::TThreadTimer::WndProc(var msg:TMessage)
if msg.message=WM_TIMER then
他自己处理
msg.result:=0
else
msg.result:=DefWindowProc(0,....)
end
问题就出在调用 DefWindowProc时,传输的HWND参数居然是常数0,这样实际上
DefWindowProc是不能工作的,对任何输入的消息的调用均返回0,包括
WM_QUERYENDSESSION,所以不能退出windows。由于DefWindowProc的不正常调用,实际上
除WM_TIMER,其他消息由DefWindowProc处理都是无效的。
解决的办法是在 PSock.pas
在 TThreadTimer.Wndproc 内
Result := DefWindowProc( 0, Msg, WPARAM, LPARAM );
改为:
Result := DefWindowProc( FWindowHandle, Msg, WPARAM, LPARAM );
早期低版本的OICQ也有这个问题,如果不关闭OICQ的话,关闭计算机时屏幕闪了一下又
返回了。
我想问一下,这个bug我怎么去修改,我找不到Psock.pas在那儿,改完还要做些什么
才能真正有自己的编的程序中生效,谢谢!分不多,还有好多问题要问,老兄将就着点吧!
上次在你的提供的链接
http://delphi.mychangshu.com/data/%CC%B8Delphi%B1%E0%B3%CC%D6%D0%A1%B0%C1%F7%A1%B1%B5%C4%C0%FB%D3%C3.htm
中,有一问题我还是不知道怎么去做,请教一下:
Part:实际应用之三:利用流制作自己的OICQ
Question:
OICQ使用的是UDP协议,这是一种无连接协议,即通信双方不用建立连接就可以发送信
息,所以效率比较高。Delphi本身自带的FastNEt公司的NMUDP控件就是一个UDP协议的用户
数据报控件。不过要注意的是如果你使用了这个控件必须退出程序才能关闭计算机,因为
TNMXXX控件有BUG。所有nm控件的基础 PowerSocket用到的ThreadTimer,用到一个隐藏的
窗口(类为TmrWindowClass)处理有硬伤。
出问题的地方:
Psock::TThreadTimer::WndProc(var msg:TMessage)
if msg.message=WM_TIMER then
他自己处理
msg.result:=0
else
msg.result:=DefWindowProc(0,....)
end
问题就出在调用 DefWindowProc时,传输的HWND参数居然是常数0,这样实际上
DefWindowProc是不能工作的,对任何输入的消息的调用均返回0,包括
WM_QUERYENDSESSION,所以不能退出windows。由于DefWindowProc的不正常调用,实际上
除WM_TIMER,其他消息由DefWindowProc处理都是无效的。
解决的办法是在 PSock.pas
在 TThreadTimer.Wndproc 内
Result := DefWindowProc( 0, Msg, WPARAM, LPARAM );
改为:
Result := DefWindowProc( FWindowHandle, Msg, WPARAM, LPARAM );
早期低版本的OICQ也有这个问题,如果不关闭OICQ的话,关闭计算机时屏幕闪了一下又
返回了。
我想问一下,这个bug我怎么去修改,我找不到Psock.pas在那儿,改完还要做些什么
才能真正有自己的编的程序中生效,谢谢!分不多,还有好多问题要问,老兄将就着点吧!