|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Интернет. Процесс передачи данных.
Уважаемые любители своего дела!!!
Появилась маленькая проблема. Необходимо чтобы при скачивание файла по HTTP в ProgressBar - е показывался процесс скачивания. Я нашел код while (ReadLen <> 0) and (stop = false) do begin //читаем в буфер InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen); //смотрим ск-ко осталось докачать InternetQueryDataAvailable(hURL, fSize, 0, 0); ProgressBar1.Position := ProgressBar1.Max - fSize; BlockWrite(f, fBuf, ReadLen); //<-пишем в файл Application.ProcessMessages; end; но что-то он не работает как этого хотелось бы. fSize - сколько осталось докачать. У меня получается, что во время скачивания ProgresBar не заполняется равномерно, а скачет. То целиком заполнится, то вообще пустой. Я вроде все перерыл не могу больше других примеров найти. Может можно через function HttpQueryInfo , пробал тоже бред какойто возвращает. Может это связанно с настройками интернета моего. А еще по поводу подвисания формы во время открытия URL. Все пишут используй Application.ProcessMessages, но в функцию я же ее не вставлю т.е. сама функция глючит или это возможно как-то? Помогите пожалуйста!!! Один мозг хорошо. а много лучше!!! |
#2
|
||||
|
||||
насчёт подвисания формы могу посоветовать попробовать засунуть ф-цию, которая её подвисает в поток, вот так
Код:
var h1:THandle; ... CreateThread(nil,0,@ИмяФункци,nil,0,h1); |
#3
|
|||
|
|||
спасибо за ответ!!!
метод этот вставлять где? После функции или перед? И может вооще сначала create, а потом и begin т.е. создать а потом запустить? Я просто об этом методе не слышал. Если можешь, расскажи пожалуйста по подробнее. |
#4
|
||||
|
||||
ну это типа поток получается - он выполняется отдельно от всего остального. это APIшная ф-ция, можно и делфовую юзать, там класс TThread, но по-моему апишную проще. можно хоть 1000 потоков насоздать и они будут одновременно выполнятся.
процедуру(именно процедуру, а не функцию, это я сбредил "ИмяФункции" написал, надо было "ИмяПроцедуры") напиши где нибудь отдельно просто, а там, где на выполнятся должна втавь CreateThread(nil,0,@ИмяПроцедуры,nil,0,h1); желательно, чтоб поток не использовал какие-нибудь переменные одновременно с основным потоком проги иначе будет exception: access violation. могу рассказать как и этого избежать, но потом, если потребуеться. Последний раз редактировалось Keygenmusic, 16.11.2005 в 16:57. |
#5
|
|||
|
|||
Спасибо тебе большое!!!
Если что обращусь. Да, я пробывал ошибка выскакивает, но я сам сначало попробую, а потом если не получится то "вторая строчка" . Еще раз СПАСИБО!!! |