用idhttp打开网页或下载文件时如何显示进度

时间:2023-03-09 14:45:02
用idhttp打开网页或下载文件时如何显示进度

在它的workbegin work事件中写代码

procedure TfrmDownLoad.IdHTTP1WorkBegin(Sender: TObject;
   AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
   ProgressBar1.Max := AWorkCountMax ;
end;

procedure TfrmDownLoad.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
   const AWorkCount: Integer);
begin
   ProgressBar1.Position := AWorkCount ;
end;

显示下载速度
idhttp有一个方法就是OnWork,有一个参数AWorkCount,就是当前下载的大小(K)
用一个全局变量记录时间
在onWorkBegin的时候取一下时间
然后在OnWorK里再取一下时间,做差得到下载用的时间,然后用下载的大小除以时间就是下载的速度
全局变量:lastc,lastt
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
   nsize.Caption := '已下载:'+floattostr(ByteToStr(AWorkCount))+'MB';
   speeds.Caption := '下载速度:'+floattostr((AWorkCount-lastc)*3600*24/(lastt-now)))+'kb/s';
   ProgressBar1.Position:=AWorkCount;
   lastc:=AWorkCount; //用ProgressBar1.Position做lastc也可以
   lastt:=now;
end;