我的程序用到UDP组件,当这个程序未关掉时,无法注销和关掉WINDOWS(9X、NT),连DELPHI提供的那个UDP的例子也有这毛病,如何解决?我没多少分,所以再问问如何用UDP在网上传文件?如何得到对方机器目录、文件列表?如何把程序做成WINDOWS(NT)的服务,即显示不出其窗体(隐藏窗体也行)。

解决方案 »

  1.   

    我的程序用到UDP组件,当这个程序未关掉时,无法注销和关掉WINDOWS(9X、NT),连DELPHI提供的那个UDP的例子也有这毛病,如何解决?
    拦截windows的关机消息
    procedure WMQueryEndsession(Var Msg:TMessage);Message WM_QueryEndSession;
    procedure Tclient.WMQueryEndsession(var Msg: TMessage);
    begin
      Msg.Result := 1;
      client.close; //退出自己的程序
    end;
    UDP在网上传文件?要装客户端才行
      

  2.   

    谢谢过客,等解决了这个问题我分都给你都行.
    但,怎么就UDP程序有这个问题呢?我其他DELPHI程序都会在关机时被WINDOWS自动关掉,是不是一用到网络组件就不会自动断开?那QQ之类的软件莫非都是拦截WINDOWS的关机消息?
    再请教一下关机和注销消息是一个吗,如何考虑全面?既然用到UDP了,当然会有客户端,我想知道原理和代码.请大家不吝赐教.
      

  3.   

    我觉得用UDP传文件不好UDP只管传,数据丢了怎么办?传字符还能好点,丢了丢了吧(所以QQ老是容易丢包)你传文件,丢了个包,文件就不能用了呀!
      

  4.   

    主要是第一个问题,就是用了UDP怎么就关不了WINDOWS呢?除了用拦截windows消息解决,是不是UDP自己有什么设置?
      

  5.   

    这是UDP空间的一个BUG,只要你在FORM.CLOSEQUERY中将UDP.FREE就可以了.也就是程序关闭的时候关闭手动释放UDP空间就可以了.
      

  6.   

    其实DELPHI7中的INDY控件很好用啊.
      

  7.   

    我都没听说过indy控件,只用过DELPHI4、5、6,我感觉6启动非常慢,也许是我机器慢吧(C366)。
    FORM.CLOSEQUERY是什么事件?程序关闭的时候关闭手动释放UDP空间?我要是手动,就把程序关了就行了,就没有这个问题了.
      

  8.   

    FORM.CLOSEQUERY是关闭确认事件。
    FORM.CLOSEQUERY(SENDER:TOBJECT;CANCLOSE:BOOLEAN)
    Begin
    try
      Udp.free;
    finally
      canclose:=true;
    end;
    end;
    这样就可以正常关机了。
      

  9.   

    谢谢缥缈兄,试了一下,果然好用(我还试了在FORM.CLOSE中加UDP.FREE,果然不好用)。
    INDY控件在DELPHI6中就有,但我最先接触的就是UDP,所以什么都UDP了,浏览的许多DELPHI教材上也没说过INDY控件,听你说后在DELPHI中看了一下,果然功能挺多,再谢。过客兄拦截消息的办法,如果程序在windows置最前的话,在关机时只会关掉程序,仍然不会关机,但若程序不在最前(比如说已最小化),就可以顺利关机了。API我不会,消息什么的可能再简单设一下就可以了吧,这里也谢谢过客兄。来CSDN的第一个问题就这样被解决了,甚激动,以后往二位继续指教。
    问题二:如何能做成WINDOWS NT的服务?或在NT下用CTRL+ALT+DEL键(任务管理器)也看不到我的程序?