关于 NMUDP控件的疑难问题,请赐教....(100分)

  • 主题发起人 主题发起人 HoneyCow
  • 开始时间 开始时间
H

HoneyCow

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个程序中使用Delphi中NMUDP控件,在程序运行时为什么不能通过 开始菜单关闭系统 关机
win2k和win98现象一样,后来我在窗口的OnCloseQuery事件中加入NMUDP1.Free
后在win2k下可以关机,而98下仍不行。
请高手赐教...
gqg@21cn.com
 
NMUDP1.destory试试
 
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的话,关闭计算机时屏幕闪了一下又返回了。
 
谢谢abc_xp,送上100分。
 
PSOCK.pas到哪里能弄到。谢谢
 
我用TNMUDP一个程序也遇到了这样不能关机的问题,我想放弃它,用Indy控件代替,不过好像很难啊,有人给点建议吗?
 

Similar threads

S
回复
0
查看
893
SUNSTONE的Delphi笔记
S
S
回复
0
查看
870
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部