我的程序:
 先设置了
  IdTCPClient.Host := '127.0.0.1';
  IdTCPClient.Port := 1234;procedure NetLink;
begin
  try
    IdTCPClient.Connect;
  except
    if Application.MessageBox('连接不上!是否重设?','出错', MB_YESNO) = IDYES then
    begin
      IPSetup; //<重新设置Host和Port的模式窗口>
      NetLink;
    end;
  end;
end;很奇怪,当连接不成功时,这里MessageBox 和模式窗口都不能显示,而直接执行NetLink进行循环连接,我跟踪了,发现都执行,但MessageBox 和模式窗口不能停下来!!是不是Connect把Windows的消息系统都搞乱了,怎么办!!

解决方案 »

  1.   

    补充一下,我用的是Delphi 6,不知是不是控件有BUG
      

  2.   

    你用以下代码应该可以解决你的问题:procedure NetLink;
    begin
      try
        IdTCPClient.Connect;
       if idtcpclient1.Connected =false then
        begin
         Idtcpclient.disconnect;
         if Application.MessageBox('连接不上!是否重设?','出错', MB_YESNO) = IDYES  then
        begin
          IPSetup; //<重新设置Host和Port的模式窗口>
          NetLink;
        end;
       end;
      except
       Idtcpclient.disconnect;
      end;
    end;
      

  3.   

    //上叙代码写错了一个控件名 idtcpclient1.Connected procedure NetLink;
    begin
      try
        IdTCPClient.Connect;
       if idtcpclient.Connected =false then
        begin
         Idtcpclient.disconnect;
         if Application.MessageBox('连接不上!是否重设?','出错', MB_YESNO) = IDYES  then
        begin
          IPSetup; //<重新设置Host和Port的模式窗口>
          NetLink;
        end;
       end;
      except
       Idtcpclient.disconnect;
      end;
    end;
      

  4.   

    谢谢,我回去试试。
    另外,我还发现ReadBuffer没有TimeOut设置,如果万一出一点送错收不到指定长度的数据,那不是死等,这又如何解决呢?
    我在网上找到一个Indy说明,人家说是有ReadTimeOut属性的,但我的里面找不到
    另我看一些网上的例程,是这样的,IdTCPClient.Connect(ATimeOut),但我的里面也找不到Connect有参数
    我的是Delphi6安装就自动安装了的Indy
      

  5.   

    去Indy网站下载新的啊,Delphi6自带的版本太老,问题多多...
    网站:
    http://www.indyproject.org/index.html
      

  6.   

    问题又来了,下载了Indy9.0.14,安装时却出现找不到@Idresourcestrings@_RSBindingAny入口在Indy60.bpl
    搞了半天还搞不定
      

  7.   

    再说清楚一点:
    我下载了Indy9,但是安装老是不成功
    我用的是Delphi6,在Indy网站下载的Indy9.0.14
    我按说明先将Delphi6自带的Indy卸载掉,然后运行FullD6.bat生成包文件,再启动Delphi6安装。但出现了
     找不到程序入口@Idresourcestrings@_RSBindingAny在Indy60.bpl动态链接库中
    意思大概这样,我记不是很清
    我又试了9.0.13;9.0.12;9.0.11;都不行
    后来我以为我的Delphi6没升级,又升级了RTL2,也不行,升级了RTL3也不行
    郁闷啊
      

  8.   

    也许你没有卸载完全,与旧的文件冲突了
    运行borland\delphi6\Borland Delphi 6.msi来卸载
    它会自动删除旧的文件
      

  9.   

    使用下面的方法来捕获文件异常,根据不同的异常进行相关的处理
    try {
        //操作文件代码
    }
    catch (CFileException * e) {
        switch (e->m_cause) {
            case CFileException::accessDenied :
                //文件访问异常,一般为另一个应用程序在使用该文件
            break;
            case CFileException::badPath :
                //路径不正确
            break;
            case CFileException::diskFull :
                //磁盘空间已满
            break;
            case CFileException::fileNotFound :
                //指定目录下没有发现要操作的文件
            break;
            case CFileException::hardID :
                //硬件错误
            break;
            case CFileException::lockVoilation :
                //文件锁定失败
            break;
            case CFileException::shareVoilation :
                //文件共享错误
            break;
            case CFileException::tooManyOpenFiles :
                //文件打开太多
            break;
        }
    }只有具体知道文件异常的类型才能进行响应的处理,在每个case语句的后面根据具体异常的类型进行相应的处理即可希望对你有所帮助!