在线程中使用idhttp get一张验证图片.下载完毕然后在Form1的Image1显示,但是在get之后
          IdHTTPT.Get(imgURL,   ms);
          ms.SaveToFile('checkImg'+intToStr(siteIN)+'.bmp');
          ms.Position   :=   0;
                     Form1.Memo1.Lines.Add(' ');
           Form1.Memo1.Lines.Add('        成功获取验证码图片...');
              bmp   :=   TBitMap.Create;
              bmp.LoadFromStream(ms);
             Form1.Image1.Picture.LoadFromFile('checkImg'+intToStr(siteIN)+'.bmp');
             Form1.Image1.Repaint;
    图片因为未下载完成无法显示出来,线程中使用sleep也不能实现,还试过了timer的if fileExists.请教下如何在线程中
下载完成一张验证图片然后在image中显示...先行谢过了......

解决方案 »

  1.   

    我有获取QQ网页验证码的delphi代码,如果你的贴子加到100分可以将代码给你。技术换分,无可厚非。
      

  2.   

    先创建tmemorystream,下载图片image载入。==我写个把
      

  3.   

      procedure   TForm1.BitBtn1Click(Sender:   TObject);   
        var   
            strStream:   String;   
            memStream:   TMemoryStream;   
            jpegimg:   TJPEGImage;   
        begin   
            strStream   :=   idhttp1.Get('http://localhost/fc1_3.jpg');   
            memStream   :=   TMemoryStream.Create;   
            jpegimg       :=   TJPEGImage.Create;   
            try   
                memStream.Write(strStream[1],   Length(strStream));   
                memStream.Position   :=   0;   
                showmessage(Inttostr(Length(strStream)));   
                jpegimg.LoadFromStream(memStream);   
                Image1.Picture.Assign(jpegimg);   
            finally   
                memStream.Free;   
                jpegimg.Free;   
            end;   
        end; 
      

  4.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
    stream:TMemoryStream;
    begin
    Stream := TMemoryStream.Create ;
    idhttp1.Get('http://avatar.profile.csdn.net/2/F/4/2_shuaialang.jpg',Stream);
    stream.SaveToFile('c:\1.jpg');
    image1.picture.loadfromfile('c:\1.jpg');
    end;
      

  5.   


    我用的就是跟你这一样的代码..但是执行到image1.picture.loadfromfile的时候验证图片还没下载完...显示不出图片来..
    sleep也不行..线程暂停了....
      

  6.   

    ms.SaveToFile('checkImg'+intToStr(siteIN)+'.bmp'); 这句在磁盘上还能看到图片?
      

  7.   

    早不用 INDY 了,用 ICS 组件多 happy
      

  8.   

    INDY的HTTP下载问题太多,建议用别的组件,有可能不是文件没下载完成,而是服务器给你返回的错误信息。
      

  9.   

    以前写的,创建线程的时候将Timage传进去function GetImage(): TJPEGImage;
    var
      mmStream: TMemoryStream;  
    begin
      Result := nil;
      mmStream := TMemoryStream.Create;
      try
        FIdConn.Get(Format(CSVerifyImage, [RandomR()]), mmStream);
        mmStream.Position := 0;
        Result := TJPEGImage.Create;
        Result.LoadFromStream(mmStream);
      finally
        mmStream.Free;
      end;
    end;procedure Execute();
      try
        jpg := GetImage();
        if jpg <> nil then
        try                             
          FImage.Picture.Assign(jpg);
        finally
          jpg.Free;
        end;
      except
        FImage.Picture.Graphic := nil;
      end;
      

  10.   

    IDHTTP有个超时时间的设置一下
    要不用GOTO
      

  11.   

    我原来也是用IdHTTP的组件下载谷歌地图的图片,老是莫名奇妙的出错,最后改为用SynaSock来下载,非常稳定,需要SynaSock给我发站内短信。
      

  12.   

    IDHTTP还可以,ICS的也不错,只是用ICS读取 PHP的PNG格式验证码图片时可能会无法读取,IDHTTP就可以。