Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Процент скачивания файла[delphi] |

04.02.2010, 13:24
|
|
Участник форума
Регистрация: 08.11.2009
Сообщений: 114
Провел на форуме: 201148
Репутация:
-4
|
|
Процент скачивания файла[delphi]
Всем привет! Нашел функцию для скачивания из интернета:
Код:
function GetInetFile (const fileURL, FileName: String): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] 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)
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
Подскажите как доработать его, чтобы он показывал процент скачивание в progressbar?
|
|
|

04.02.2010, 16:57
|
|
Постоянный
Регистрация: 20.01.2010
Сообщений: 338
Провел на форуме: 500264
Репутация:
69
|
|
вот тебе пример функции из моего модуля. Думаю разберешься, там все еть.
Код:
function TApiGetHTTP.Get(const AURL: string; AResponseContent: TStream): boolean;
const BufferSize = 1024;
var
Buffer : array[0..BufferSize] of Byte;
BufferLen: DWORD;
Header : string;
hSession, hConnect, hRequest : hInternet;
FSize : Int64;
begin
{ Подготавливаем заголовок }
If FUserAgent = '' Then FUserAgent := 'Delphi/7.0';
If FAccept <> '' Then Header := Header + 'Accept: ' + FAccept + #10;
If FAcceptEncoding <> '' Then Header := Header + 'Accept-Encoding: ' + FAcceptEncoding + #10;
If FConnection <> '' Then Header := Header + 'Connection: ' + FConnection + #10;
If FContentType <> '' Then Header := Header + 'Content-Type: ' + FContentType + #10;
If FKeepAlive <> '' Then Header := Header + 'Keep-Alive: ' + FKeepAlive + #10;
If FAcceptCharset <> '' Then Header := Header + 'Accept-Charset: ' + FAcceptCharset + #10;
If (FRangeStart <> '') and (FRangeEnd <> '') Then
begin
Header := Header + 'Range: bytes=' + FRangeStart + '-' + FRangeEnd;
end;
// Если есть куки, то приделываем их к заголовку
If FCookie <> '' Then Header := Header + 'Cookie: ' + FCookie;
hSession := InternetOpen(PChar(FUserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
hConnect := InternetConnect(hSession, pchar(GetHost(AURL)), 80, nil, nil,
INTERNET_SERVICE_HTTP, 0, 0);
hRequest := HttpOpenRequest(hConnect, PChar('GET'), PChar(Copy(AURL, Pos('.ru', AURL) +4, Length(AURL))), 'HTTP/1.1',
nil, nil, 0, 0);
HttpSendRequest(hRequest, PChar(Header), Length(Header), nil,
0);
FSize := GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, AURL);
TriggerOnWorkBegin(FSize);
repeat
Result := InternetReadFile(hRequest, @Buffer,
SizeOf(Buffer), BufferLen);
AResponseContent.Write(Buffer, SizeOf(Buffer));
TriggerOnWork(AResponseContent.Position);
until BufferLen = 0;
InternetCloseHandle(hRequest);
InternetCloseHandle(hSession);
TriggerOnWorkEnd(nil);
end;
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|