P
plato
При выполнении кода форма зависает. Как вывести прогрессбар?
Пишу программу, которая должна с моего сайта скачать нудный файл, и старый заменить новым. Типа обновление программы. Проблема в том, что во время закачки форма застывает, пока не закончится закачка. А хотелось бы поставить какой-то прогрессбар и отображать процесс загрузки.
Вот фрагмент кода:
Сама функция вытянута из инета, который пестрит этим примером.
Пример работает и файл вытягивается.
Проблема с формой и прогрессбаром.
Пытался вызывать эту функцию и в нажатии кнопки, и в таймере по времени. Одинаково загружает форму и не дает вывести прогрессбар.
Пишу программу, которая должна с моего сайта скачать нудный файл, и старый заменить новым. Типа обновление программы. Проблема в том, что во время закачки форма застывает, пока не закончится закачка. А хотелось бы поставить какой-то прогрессбар и отображать процесс загрузки.
Вот фрагмент кода:
Код:
function TForm1.GetInetFile(const fileURL, FileName: String): boolean;
begin
Result:=False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
dwIndex := 0; dwCodeLen := 10;
try
hURL := InternetOpenURL(hSession, PChar(fileURL),nil,0,0,0);
HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, @dwcode, dwcodeLen, dwIndex);
res := pchar(@dwcode);
Memo1.Lines.Add(res); // вывожу на мемо размер требуемого файла
pb.Max := StrToInt(res); // задаю макс для прогрессбара
try
AssignFile(f, FileName);
Rewrite(f,1);
Timer1.Enabled := true;
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen);
until BufferLen = 0;
CloseFile(f);
Result:=True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
Пример работает и файл вытягивается.
Проблема с формой и прогрессбаром.
Пытался вызывать эту функцию и в нажатии кнопки, и в таймере по времени. Одинаково загружает форму и не дает вывести прогрессбар.