Niedawno napisalem przy okazji pisania ksiazki Delphi 7. Kompendium programisty taki kod (pochodzi z rozdzialu 11.):
uses WinInet;
procedure TMainForm.Download(const URL: String; FileName: String);
var
Buffer : array[1..1024] of Byte; // bufor zawierający ściągnięty fragment pliku
hSession, hURL : HINTERNET;
dwRead : DWORD; // ilość odczytanych danych
dwSize : DWORD; // rozmiar pliku
F : File;
pBuf : Pointer;
dwBufLen : DWORD;
dwIndex : DWORD;
TotalRead : Integer;
begin
{ otwieranie połączenia }
hSession := InternetOpen('Fast Download',
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
Application.ProcessMessages;
lblProgress.Caption := 'Łączenie z serwerem...';
btnDownload.Enabled := False;
try
{ otwarcie podanego adresu URL }
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0);
Application.ProcessMessages;
lblProgress.Caption := 'Czekanie na odpowiedź...';
dwBufLen := 1024;
dwIndex := 0;
GetMem(pBuf, dwBufLen);
{ pobranie informacji na temat wielkości pliku }
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
pBuf, dwBufLen, dwIndex);
dwSize := StrToInt(StrPas(pBuf));
ProgressBar.Max := (dwSize div 1024);
FreeMem(pBuf, dwBufLen);
try
AssignFile(F, FileName);
try
Rewrite(F, 1);
repeat
if Broken then Break;
{ pobieranie kolejnych fragmentów pliku }
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
BlockWrite(F, Buffer, dwRead); // zapisanie buforu do pliku
TotalRead := TotalRead + dwRead;
Application.ProcessMessages;
{ wyświetlenie postępu }
lblProgress.Caption := 'Ściągam ' + IntToStr(TotalRead div 1024) + ' kB z ' + IntToStr(dwSize div 1024) + ' kB';
ProgressBar.Position := TotalRead div 1024;
until dwRead = 0;
finally
CloseFile(F);
end;
finally
InternetCloseHandle(hSession);
end;
finally
InternetCloseHandle(hURL);
btnDownload.Enabled := False;
end;
lblProgress.Caption := 'Pobrano';
end;
Jezeli skorzystasz bez objasnienia to ok :)