При выполнении кода форма зависает. Как вывести прогрессбар?

  • Автор темы plato
  • Дата начала
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;
Сама функция вытянута из инета, который пестрит этим примером.
Пример работает и файл вытягивается.
Проблема с формой и прогрессбаром.
Пытался вызывать эту функцию и в нажатии кнопки, и в таймере по времени. Одинаково загружает форму и не дает вывести прогрессбар.
 
V

vital

уже было на форуме!

Добавлено: Причем на этой же странице! Было сложно посмотреть?

https://codeby.net/threads/32898.html
А еще
https://codeby.net/threads/3329.html?hl=progressbar
И еще много раз..
<div class="borderwrap"><div class="maintitle"><p>Поиск</p></div><table class="ipbtable" cellspacing="1">[tr]<td class="row2"><div class="postcolor">закачка файла</div></td>[/tr][tr]<td class="row2"><form action="https://codeby.net/index.php?act=Search&CODE=01" method="post"><input type='hidden' name='forums' id='gbl-search-forums' value='all' /><input type="text" value="закачка файла" size="80" name="keywords" id='ipb-tl-search-box' /><input class="button" type="submit" value="ОК" />
<input id="gbl-search-checkbox" type="checkbox" onclick="gbl_check_search_box()" value="1" />Искать только в этом форуме?<table class="ipbtable" cellspacing="1">[tr]<td class="row2"><fieldset class="search"><legend>Искать</legend><input type="radio" checked="checked" value="posts" id="search_in_posts" class="radiobutton" name="search_in" /><label for="search_in_posts">В сообщениях</label><br/><input type="radio" value="titles" id="search_in_titles" class="radiobutton" name="search_in" /><label for="search_in_titles">В заголовках</label></fieldset></td><td class="row2"><fieldset class="search"><legend>Отображение результатов</legend><input type="radio" checked="checked" id="result_topics" value="topics" class="radiobutton" name="result_type" /><label for="result_topics">Результаты в виде тем</label><br/><input type="radio" id="result_posts" value="posts" class="radiobutton" name="result_type" /><label for="result_posts">Результаты в виде сообщений</label></fieldset></td>[/tr]</table></form></td>[/tr]</table></div>
 
P

plato

Помогло добавление в код Application.ProcessMessages;
Вопрос закрыт.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!