Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 928

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Работая с WebBrowser я заметил одну неприятность - во время того как загружается страница мне нужно добиться полной её загрузки:
Делаю я это так...
WebBrowser1.Navigate('sdfsdfsdfsdfsdfsdfs');
while WB1.Busy do Application.ProcessMessages;
Но при использовании такого кода не происходит нужного, однако, если сперва поставить WebBrowser1.Navigate('sdfsdfsdfsdfsdfsdfs'); напимер в OnClick куда-нибудь, а по нажатию на вторую кнопу сделать while WB1.Busy do Application.ProcessMessages; происходит то что нужно (причем не зависти когда нажата вторая кнопка сразу же или чуть позже). Тогда программа дожидается загрузки страницы....

Помоготе разобраться с этим случаем пожалуйста. Заранее спасибо.

eclipse Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: eclipse (статус: Посетитель)
Вопрос отправлен: 25 марта 2010, 16:40
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, eclipse!
Крутясь в цикле, Вы не даете работать броузеру и только даром поедаете процессорное время.
Другая разновидность вашего кода выглядит так

while (webBrowser1.ReadyState <>  READYSTATE_COMPLETE) do
  Application.ProcessMessages;
(если не находит READYSTATE_COMPLETE, объявите константу
const READYSTATE_COMPLETE = 4;)
Но по хорошему, лучше использовать событие от броузера OnNavigateComplete2, которое вызывается тогда, когда страница полностью загружена.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 25 марта 2010, 17:09


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 7 апреля 2010, 17:01; участников в обсуждении: 2.
eclipse

eclipse (статус: Посетитель), 7 апреля 2010, 16:12 [#1]:

Долго мучался и пришёл к выводу, хоть и получается как-то некорректно :
try
webbrowser1.navigate('........');
finnaly
While Webbrowser1.busy do application.processmessages;
end;
Вадим К

Вадим К (статус: Академик), 7 апреля 2010, 16:33 [#2]:

А чем он принципиально отличается от начального Вашего варианта?
Галочка "подтверждения прочтения" - вселенское зло.
eclipse

eclipse (статус: Посетитель), 7 апреля 2010, 16:45 [#3]:

Да хрен его знает! Просто попробывал так и получилось...
Вадим К

Вадим К (статус: Академик), 7 апреля 2010, 16:55 [#4]:

Бывает так, что какое то кусок кода при определенных стечениях обстоятельств начинает работать. Но на другой машине уже не будет. или изменятся параметры компиляции.

Итого - плохое решение.
Галочка "подтверждения прочтения" - вселенское зло.
eclipse

eclipse (статус: Посетитель), 7 апреля 2010, 17:01 [#5]:

Согласен! С подобным сталкивался.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.03 сек.