Почему бы не использовать инди.Если вы используете TIdHTTP, его просто
procedure DownloadFile;
var
IdHTTP1: TIdHTTP;
Stream: TMemoryStream;
Url, FileName: String;
begin
Url := 'http://www.rejbrand.se';
Filename := 'download.htm';
IdHTTP1 := TIdHTTP.Create(Self);
Stream := TMemoryStream.Create;
try
IdHTTP1.Get(Url, Stream);
Stream.SaveToFile(FileName);
finally
Stream.Free;
IdHTTP1.Free;
end;
end;
Вы даже можете добавить индикатор выполнения, используя события OnWork и OnWorkBegin
procedure IdHTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode;AWorkCountMax: Int64);
begin
ProgressBar.Max := AWorkCountMax;
ProgressBar.Position := 0;
end;
procedure IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
ProgressBar.Position := AWorkCount;
end;
Я не уверен, что эти события возникаютконтекст основного потока, поэтому любые обновления, выполняемые для компонентов VCL, возможно, придется выполнять с использованием компонента tidnotify для устранения проблем с многопоточностью.Может быть, кто-то еще может проверить это.