| 
| 
 | Вопрос # 1 266/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты! Хочу написать программу для скачивания файлов из интернета (что-то вроде Download Master). Есть ли в Delphi стандартные компоненты для этого и как с ними работать? 
|  |   Вопрос задал: Leonardo (статус: Посетитель)Вопрос отправлен: 16 января 2008, 22:29
 Состояние вопроса: открыт, ответов: 3.
 |  Ответ #1. Отвечает эксперт: min@y™ Есть пакет компонентов, поставляемый вместе с Delphi, называется Indy, лежит тут: %Delphi%\Source\Indy\. Инфы по работе с ними в Сети - вагон, причём пол-вагона - на русском языке.Однако, в инете полно сторонних компонентов, например "Internet component suite" (ICS). Взять можно тут.
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 17 января 2008, 08:24
 Оценка за ответ: 4
 |  Ответ #2. Отвечает эксперт: Feniks Здравствуйте, Leonardo!Начиная с Internet Explorer 3, Microsoft поддерживает очень полезные API, Wininet. Эти функции позволяют использовать все возможности IE, такие как настройки прокси, кэширование файлов и т.д.
 В Примере №1 показано использование этих функций для скачивания файла с нужного URL. Это может быть любой доступный URL, ftp://, http://, gopher://, и т.д. Более подробную информацию об этих функция можно посмотреть в MSDN - Win32 Internet API Functions.
 
 В Примере №2 демонстрируется возможность определения размера файла в интернете.
 
 А также смотрите в атаче статейку «Создаём свой GetRight».
 К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 
 Приложение:Переключить в обычный режим   function DownloadFile(const Url: string): string;varNetHandle: HINTERNET;UrlHandle: HINTERNET;Buffer: array[0..1024] of char;BytesRead: cardinal;beginResult := '';NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if Assigned(NetHandle) then   begin      UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);      if Assigned(UrlHandle) then        begin         FillChar(Buffer, SizeOf(Buffer), 0);         repeat           Result := Result + Buffer;           FillChar(Buffer, SizeOf(Buffer), 0);           InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);         until BytesRead = 0;         InternetCloseHandle(UrlHandle);       end     else       begin          raise Exception.CreateFmt('Cannot open URL %s', [Url]);       end;      InternetCloseHandle(NetHandle);   endelse    raise Exception.Create('Unable to initialize Wininet');end;=================================================== uses wininet;... varhSession,hFile:hInternet;dwBuffer:array[1..20] of char;dwBufferLen,dwIndex:DWORD;beginResult:=0;hSession:=InternetOpen('GetUrlSize',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);if Assigned(hSession) then beginhFile:=InternetOpenURL(hSession,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0);dwIndex:=0;dwBufferLen:=20;if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then
Result:=StrToInt(StrPas(@dwBuffer));if Assigned(hFile) then InternetCloseHandle(hFile);InternetCloseHandle(hsession);end;end;
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 17 января 2008, 09:57
 Оценка за ответ: 4
 |  Ответ #3. Отвечает эксперт: Вадим К Здравствуйте, Leonardo!Не понимаю, для кого я пишу статьи:)
 Прям на этом сайте в разделе статьи есть пример, как скачать файл, используя потоки. Также там показано, как сделать прогрессбар. (Скачиваем файлы из интернета)
 Также стоит почитать статью о Виртуальный ListView, что бы сделать нормально обновляемый список (вы ведь хотите динамически отображать закачаный объем, проценты)
 
 А такого компонента как "Download Master" в ближайшее время не предвидиться
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 18 января 2008, 22:43
 
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 11 мая 2010, 10:44; участников в обсуждении: 1. 
|   | eclipse (статус: Посетитель), 11 мая 2010, 10:44 [#1]:Пример то есть но вот было бы неплохо организовать в нём докачку! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |