Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2012, 04:51   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Загрузка файла из интернета

Всем доброго времени суток. Раскопал код для загрузки файла из инета:

Код:
uses Wininet;

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;
Вопрос такой, возможно ли доработать выше представленный код так, чтобы была возможность выводить на форму объем загружаемого файла и уже загруженный объём ?

Последний раз редактировалось -Jack-; 24.10.2012 в 04:56.
-Jack- вне форума Ответить с цитированием
Старый 24.10.2012, 05:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Можно. У вас же есть размеры считаных кусков, просто сложите - вот и прогресс.
p51x вне форума Ответить с цитированием
Старый 24.10.2012, 15:34   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

да это понятно, но как реализовать это ... Влепить туда что-то по типу
Код:
Form6.ProgressBar1:= и т.д.
не подойдет, т.к. Wininet используется в нескольких формах ...
-Jack- вне форума Ответить с цитированием
Старый 24.10.2012, 16:03   #4
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Ыть ) Сам разобрался ) + помогла статейка взятая отсюда h**p://fuckinblog.ru/?p=278

Код:
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;
-Jack- вне форума Ответить с цитированием
Старый 24.10.2012, 19:02   #5
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Тему можно закрывать
-Jack- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка файла из интернета с компа, не имеющего "прямого" выхода Xardas Работа с сетью в Delphi 2 30.03.2011 18:02
Получение файла из Интернета Balexander Microsoft Office Excel 1 19.11.2010 15:53
Загрузка изображения из интернета в программу Crystallon Общие вопросы Delphi 1 12.09.2010 20:21
капча в Image, загрузка из интернета DeDoK Работа с сетью в Delphi 11 30.04.2009 13:57
Загрузка страницы из интернета Лубышев Работа с сетью в Delphi 9 10.03.2009 07:52