Форум: "Сети";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизИнтернет. Процесс передачи данных. Найти похожие ветки
← →
XRed © (2005-11-14 23:25) [0]Уважаемые любители своего дела!!!
Появилась маленькая проблема.
Необходимо чтобы при скачивание файла по 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, но в функцию я же ее не вставлю т.е. сама функция глючит или это возможно как-то?
Помогите пожалуйста!!!
Один мозг хорошо. а много лучше!!!
← →
Digitman © (2005-11-15 09:26) [1]http://forum.sources.ru/index.php?s=cb2010641b907c31c86d9420a337759a&showtopic=55534
← →
denissoft © (2005-11-15 22:31) [2]Использую вот такой код, вроде все нормально работает. Скачивание с докачкой…
procedure DownloadFile(URL,Filename:string);
type
HINTERNET = Pointer;
PHINTERNET = ^HINTERNET;
var hInet, //<-переменная сод. указатель на сессию
hURL:HINTERNET; //<-указатель на URL
fSize, //<-размер файла
ReadLen, //<-количество реально прочитанных байт
RestartPos:DWORD;//<-|позиция с которой начинается
// |докачка
fBuf:array[1..1024]of byte;//<-буфер куда качаем
f:file; //<-файл куда качаем
Header:string;//<-|дополнительная переменная в HTTP
// |заголовок
begin
try
RestartPos:=0; //<- |инициализация
fSize:=0; //<- |переменных
//Если на винте есть файл то считаем, что нужно докачивать
if FileExists(Filename) then
begin
AssignFile(f,Filename);
Reset(f,1);
RestartPos:=FileSize(F);
application.ProcessMessages;
Seek(F, FileSize(F));
end else
begin
//иначе с начала
AssignFile(f,Filename);
application.ProcessMessages;
ReWrite(f,1);
end;
//открываем сессию
hInet := InternetOpen("Mozilla",
PRE_CONFIG_INTERNET_ACCESS,
nil,
nil,
0);
//Пишем дополнительную строку для заголовка
Header:="Accept: */*";
//открываем URL
hURL := InternetOpenURL(hInet,
PChar(URL),
pchar(Header),
StrLen(pchar(Header)),
0,
0);
//устанавливаем позицию в файле для докачки
if RestartPos>0 then InternetSetFilePointer(hURL,
RestartPos,
nil,
0,
0);
//смотрим ск-ко надо скачать
InternetQueryDataAvailable(hURL, fSize,0,0);
if RestartPos>0 then
begin
form1.ProgressBar1.MinValue:=0;
form1.ProgressBar1.MaxValue:=fSize+RestartPos;
form1.ProgressBar1.Progress:=RestartPos;
application.ProcessMessages;
end else
begin
form1.ProgressBar1.MinValue:=0;
form1.ProgressBar1.MaxValue:=fSize+RestartPos;
end;
//качаем до тех пор пока реально прочитаное число байт не
//будет равно нулю или не стор
while (ReadLen<>0) and (stop=false) do
begin
//читаем в буфер
try
application.ProcessMessages;
InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen);
//смотрим ск-ко осталось докачать
InternetQueryDataAvailable(hURL, fSize,0,0);
form1.ProgressBar1.Progress:=form1.ProgressBar1.maxValue-fSize;
BlockWrite(f, fBuf, ReadLen);//<-пишем в файл
finally
Application.ProcessMessages;
end;
end;
stop:=false;
application.ProcessMessages;
InternetCloseHandle(hURL); //<-|закрываем
InternetCloseHandle(hInet);//<-|сесcии
CloseFile(f); //<-|и файл
finally
end;
end;
← →
XRed © (2005-11-16 00:32) [3]Спасибо за ответ!!!
Я сделал, но получается тоже самое. PorgressBar скачет, то есть то нет, т.е. заполняется не равномерно как должен, а бред какой-то.
form1.ProgressBar1.MinValue:=0;
form1.ProgressBar1.MaxValue:=fSize+RestartPos;
form1.ProgressBar1.Progress:=RestartPos
И не понятно Progress это Position что-ли?
Или я туплю!!! Я всю фигню пробую(скачку) URL:= http://www.mp3real.ru/mp3/chig_i_so/perekrestok/sen_similya/03_perekrestok_sen_similya.mp3
Может там сервак тупит, не те значения выдает?
Если не трудно попробуете!!!
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c