Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прогресс и Конечный адрес в EmbeddedWB 
V
    Опции темы
Keeper89
Дата 25.10.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



Доброго времени суток!

1) Пытаюсь в EmbeddedWB вывести конечный адрес (URL в OnDocumentComplete), но URL несколько раз меняется. Как определить конечный адрес?

2) Также пробую отследить прогресс загрузки документа (через OnProgressChange), в котором параметры Progress и ProgressMax изменяются сл. образом:
Цитата

10000 из 1000000
34800 из 1000000
1000000 из 1000000
-1 из 1000000
1000000 из 1000000
0 из 0

Окончание загрузки означает нули в Progress и ProgressMax одновременно?



--------------------
PM MAIL WWW   Вверх
MetalFan
Дата 25.10.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



давай заглянем в библию (MSDN).
что там пишут посчет ProgressChange:
Цитата("MSDN")

DocumentComplete Event
...
Remarks
...
The WebBrowser Control fires the DWebBrowserEvents2::DocumentComplete event when the document has completely loaded, and the READYSTATE property has changed to READYSTATE_COMPLETE. Following are some important points about the firing of this event. 

* In pages with no frames, this event fires one time after loading is complete.
* In pages where multiple frames are loaded, this event fires for each frame where the DWebBrowserEvents2::DownloadBegin event has fired. 
* This event pDisp parameter is the same as the IDispatch interface pointer of the frame in which this event fires. 
* In the loading process, the highest level frame, which is not necessarily the top-level frame, fires the final DWebBrowserEvents2::DocumentComplete event. At this time, the pDisp parameter is the same as the IDispatch interface pointer of the highest level frame. 

=======================================================================================================
ProgressChange Event
Fires when the progress of a download operation is updated on the object. 
...
Remarks

The container can use the information provided by this event to display the number of bytes downloaded or to update a progress indicator. 

To calculate the percent of progress to show in a progress indicator, multiply the value of nProgress by 100, and divide by the value of nProgressMax ; unless nProgress is -1, in which case the container indicates that the operation is finished or hides the progress indicator.



теперь что-нибудь прояснилось? )))


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Keeper89
Дата 25.10.2009, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



Цитата(MetalFan @  25.10.2009,  22:44 Найти цитируемый пост)
теперь что-нибудь прояснилось? ))) 

Да, MSDN рулит smile (у них кстати по-моему новый интерфейс на сайте).

1) С Прогрессом понятно: дожидаемся -1 и скрываем полоску.

2) По поводу загрузки. Необходимо дождаться READYSTATE_COMPLETE, но как сказано READYSTATE=READYSTATE_COMPLETE в каждом фрейме.
Я проверил так:
Код

// ----------------------------------------------------------------------
procedure TForm1.EWB1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin

  if EWB1.ReadyState = READYSTATE_COMPLETE then
  begin
    ShowMessage('DONE!');
  end;
end;

Но. Я попробовал и фреймовые сайты, и обычные - сообщение вылазит 1 раз. Вроде бы соответствия библии нет.  smile  






--------------------
PM MAIL WWW   Вверх
MetalFan
Дата 26.10.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



2. на сколько я понял, ReadyState будет равен complete при окончании загрузке документа, а не при окончании загрузки каждого фрейма...
так что все вроде бы верно.

Это сообщение отредактировал(а) MetalFan - 26.10.2009, 11:39


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Keeper89
Дата 26.10.2009, 15:09 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 6
Всего: 58



Поигрался с 2 условиями загрузки. Второе исходя из "important points" для события READYSTATE_COMPLETE:
1) 
Код

if EWB1.ReadyState = READYSTATE_COMPLETE then

и
2)
Код

if pDisp = EWB1.DefaultInterface then

Первый работает в случае загрузки всего документа + если меняется (загружается) содержимое фрейма для фреймового сайта. При этом конечный адрес равен адресу загрузившегося фрейма.
Второй - только при загрузке всего документа и на навигацию по фреймам не реагирует. Конечный адрес - адрес общий страницы.

Если посмотреть, Firefox и IE действую согласно 2 способу, оставляя адрес главной страницы. Поэтому я им и воспользуюсь. smile

Спасибо за помощь!


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.