- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Вопрос такой, возможно ли доработать выше представленный код так, чтобы была возможность выводить на форму объем загружаемого файла и уже загруженный объём ?
Код:
uses
IdHTTP, WinInet;
function GetInetFile(const fileURL, FileName: String): boolean;
var
hSession, hURL: HInternet;
Buffer: array[1..1024] of Byte;
BufferLen: DWORD;
f: File;
sAppName: String;
begin
Result:=false;
sAppName:=ExtractFileName(Application.ExeName);
hSession:=InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
try
hURL:=InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
try
AssignFile(f,FileName);
ReWrite(f,1);
repeat
InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);
BlockWrite(f,Buffer,BufferLen);
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+BufferLen;
Application.ProcessMessages;
until
BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL);
end;
finally
InternetCloseHandle(hSession);
end;
end;
function GetInetFileSize(const FileUrl:string): integer;
var
idHTTP: TidHTTP;
begin
Result:=0;
idHTTP:=TIdHTTP.Create(nil);
idHTTP.Head(FileUrl);
Result:=idHTTP.Response.ContentLength;
IdHTTP.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ProgressBar1.Max:=GetInetFileSize(Source);
GetInetFile(Source,Destination);
end;