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

Тема в разделе "Delphi - Компоненты", создана пользователем plato, 6 янв 2010.

  1. plato

    plato Гость

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

    Пишу программу, которая должна с моего сайта скачать нудный файл, и старый заменить новым. Типа обновление программы. Проблема в том, что во время закачки форма застывает, пока не закончится закачка. А хотелось бы поставить какой-то прогрессбар и отображать процесс загрузки.
    Вот фрагмент кода:

    Код (Text):
    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;
    Сама функция вытянута из инета, который пестрит этим примером.
    Пример работает и файл вытягивается.
    Проблема с формой и прогрессбаром.
    Пытался вызывать эту функцию и в нажатии кнопки, и в таймере по времени. Одинаково загружает форму и не дает вывести прогрессбар.
     
  2. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    уже было на форуме!

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

    http://codeby.net/forum/threads/32898.html
    А еще
    http://codeby.net/forum/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="http://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>
     
  3. plato

    plato Гость

    Помогло добавление в код Application.ProcessMessages;
    Вопрос закрыт.
     
Загрузка...

Поделиться этой страницей