|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.02.2011, 01:45 | #11 |
DelphiProger
Участник клуба
Регистрация: 14.11.2010
Сообщений: 1,023
|
Делаем прогресс
Теперь у нас осталась ещё одна проблема – оживить прогресс-бар. Но здесь нас подстерегает один момент: с потока нельзя просто так обращаться к компонентам формы. Точнее, правило звучит так: с одного потока нельзя обращаться к данным другого потока (переменным, коду) без специальных методов. Таких методов есть два. Первый – мы останавливаем один поток, а второй на это время получает доступ к его переменным. Либо второй поток просит первый исполнить какой-то код, а сам на это время засыпает. Способ два, которым мы и воспользуемся – это посредник. Мы шлём сообщение посреднику, чтобы он сообщил другому потоку (а может и группе), чтобы он что-то сделал. Этот способ хорош тем, что поток может обрабатывать сообщения не по принуждению, а по возможности. То есть сообщения стают в очередь. В качестве посредника мы выберем саму среду Windows. Итак, Windows при посылке сообщения позволяет передавать два целочисленных параметра. Первый мы будем использовать как идентификатор действий, второй – как дополнительный параметр. Поехали дальше. После uses перед Type вставим строку: Код:
procedure MyProgress(var msg:TMessage);message MY_MESS; И заветное Ctrl+Shift+C В свежесозданном обработчике пишем такое: Код:
А теперь возвращаемся к нашим обработчикам IdHTTP, которые мы оставили без реализации. Туда нужно вписать всего по строчке. Ниже приведена реализация. Код:
VirusN13
|
27.02.2011, 02:23 | #12 |
DelphiProger
Участник клуба
Регистрация: 14.11.2010
Сообщений: 1,023
|
у меня получилось, по прямои сшлке качает
VirusN13
|
27.02.2011, 12:27 | #13 |
Форумчанин
Регистрация: 25.11.2010
Сообщений: 164
|
Я уже писал программу с использованием компонента из инди, размер программы увеличился на ~200 Кб, решил работать на более низком уровне с сетью с помощью WinSock. Увы не получилось.
Возможно Я Быдлокодер ©.
|
27.02.2011, 13:12 | #14 |
Форумчанин
Регистрация: 25.11.2010
Сообщений: 164
|
Преобразовал функцию и всё заработало. Нужно было получать адрес сайта. Единственное эта функция возвращает файл с ответом на запрос, пока не понял как от этого избавится. А ну ещё сайтов юкоза он мне присылает 403 ошибку, хотя браузером я могу просматривать этот файл.
Код:
Возможно Я Быдлокодер ©.
|
19.11.2018, 11:54 | #15 |
Пользователь
Регистрация: 07.05.2011
Сообщений: 24
|
Знаю старая тема, но у меня не качает, лишь делает вид - скачанного файла нету.
PS: Delphi XE8 sp1
Всё намного проще, чем есть на самом деле...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Закачка-докачка файла в потоке, с прогрессом | Alter | Работа с сетью в Delphi | 2 | 13.01.2011 12:06 |
Закачка файла из Интернета | _SERGEYX_ | Работа с сетью в Delphi | 3 | 18.01.2010 14:21 |
Закачка файла происходит в отдельном потоке. | Kyran29 | Работа с сетью в Delphi | 1 | 28.11.2009 01:19 |
закачка файла отдельным потоком. | ZeitGeist7 | Общие вопросы Delphi | 12 | 26.02.2009 20:23 |
Закачка файла с ссылки | Titan123 | Работа с сетью в Delphi | 5 | 20.10.2008 13:25 |