我在IdHTTP1WorkBegin,IdHTTP1Work,IdHTTP1WorkEnd中实现一个打开网上的文件的过程中显示进程条的代码,如果我去掉“idhttp1:=tidhttp.Create(nil);”以及“idhttp1.Disconnect;”和“idhttp1.Free;”这几句,进程条可以正常显示,但加上这几句后,进程条就不出现了,请问是何原因?procedure Tfm.DblClick(Sender: TObject);
var
  sFileName: string;
  MyStream: TMemoryStream;
begin
  sFileName := 'http://www.xxx.cn/' + DBReport.Fields[0].Text;  IdAntiFreeze1.OnlyWhenIdle:=False; 
  MyStream:=TMemoryStream.Create;  try
    idhttp1:=tidhttp.Create(nil);    
    idhttp1.HandleRedirects:=true;   
    IdHTTP1.Get(widestring(FormatURL(sFileName)), MyStream);
  except
    Application.MessageBox('打开文件出错,请检查网络!','错误', MB_OK or MB_ICONERROR);
    MyStream.Free;
    Exit;
  end;  MyStream.Free;end;procedure TfmInvestReport.IdHTTP1WorkBegin(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
  ProgressBar1.Visible := true;
  ProgressBar1.Max := AWorkCountMax;
  ProgressBar1.Min := 0;
  ProgressBar1.Position := 0;
end;procedure TfmInvestReport.IdHTTP1Work(Sender: TObject;
  AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
  ProgressBar1.Position := ProgressBar1.Position+AWorkCount;
end;procedure TfmInvestReport.IdHTTP1WorkEnd(Sender: TObject;
  AWorkMode: TWorkMode);
begin
  ProgressBar1.Visible := False;
  idhttp1.Disconnect;                 // 断开连接
  idhttp1.Free;                       // 释放
end;

解决方案 »

  1.   

    晕~~~~~~~~~~~~~~~~~~~~~~~~~~
    1.如果 idhttp1 是窗体上的组件,那么 idhttp1:=tidhttp.Create(nil); 这一句将造成内存泄漏。
    2.因为 idhttp1 是用代码新创建的,它的 OnWork、OnWorkBegin、OnWorkEnd 都是等于 nil 的,
    还没有被赋值,自然这三个事件过程的代码不会被执行。
      

  2.   

    把nil值换一下!56679338,delphi网络与视频开发交流群!
      

  3.   

    1.注释掉以下三句,这三句完全是没有必要的
    idhttp1:=tidhttp.Create(nil);
    idhttp1.Disconnect;                 // 断开连接
    idhttp1.Free; 2.如果楼主确实想要动态创建 TIdHTTP ,那么加入以下代码
    //声明
      private
        idhttp1: TIdHTTP;//修改
      try
        idhttp1:=tidhttp.Create(nil); 
        //加入以下三句
        idhttp1.OnWorkBegin := IdHTTP1WorkBegin; 
        idhttp1.OnWork := IdHTTP1Work;
        idhttp1.OnWorkEnd := IdHTTP1WorkEnd;    idhttp1.HandleRedirects:=true;   
        IdHTTP1.Get(widestring(FormatURL(sFileName)), MyStream);
      except
        Application.MessageBox('打开文件出错,请检查网络!','错误', MB_OK or MB_ICONERROR);
        MyStream.Free;
        Exit;
      end;