|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | 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  
			
			
			
			
		 | |||
| 
 | |||
|   Спасибо тебе большое!!! Если что обращусь.   Да, я пробывал ошибка выскакивает, но я сам сначало попробую, а потом если не получится то "вторая строчка"  . Еще раз СПАСИБО!!! |