Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Процент скачивания файла[delphi] (https://forum.antichat.xyz/showthread.php?t=176108)

marcos 04.02.2010 13:24

Процент скачивания файла[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?

RedFern.89 04.02.2010 16:57

вот тебе пример функции из моего модуля. Думаю разберешься, там все еть.

Код:

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;



Время: 20:33