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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с WebBrowser, Слишком шустрый)))) 
V
    Опции темы
AlexLogos
Дата 9.2.2011, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Народ, здравствуйте опять  smile . Я реализовал в проге механизм, заполнения формы и нажатия на кнопку на форме. Далее по идее браузер должен сформировать строку с параметрами и передать на сервер. Для того чтоб узнать что это за URL я пишу
Код

WebBrowBtnClick(WebBrow,Searchers[j].SButton) //Жму на кнопку
ShowMessage(WebBrow.LocationURL);

Но в результате получаю еще предыдущий адрес. Толи браузер еще не завершыл обработку, то ли еще что-то. Пробыва узнавать не закончил ли браузер загрузку и писал
Код

WebBrowBtnClick(WebBrow,Searchers[j].SButton) //Жму на кнопку
while WebBrow.ReadyState<>READYSTATE_COMPLETE {или WebBrow.Busy} do
  Application.ProcessMessages; 
ShowMessage(WebBrow.LocationURL);

Всеравно получаю старый адрес. Как отследить когда можна забрать новый адрес?
PM MAIL   Вверх
cat512
Дата 10.2.2011, 03:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: нет
Всего: 15



Очевидно твоя функция криво работает
Используй Navigate, должно работать

Это сообщение отредактировал(а) cat512 - 10.2.2011, 03:17
PM MAIL   Вверх
MetalFan
Дата 10.2.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я в свое время пользовался TEmbeddedWB назначал событие OnDocumentComplete и OnNavigateError, в нем выставлялся флаг, что мол страница загружена или ошибка произошла.
А цикл ожидания загрузки страницы выглядел как ожидания взведения одного из флагов.


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



MetalFan, твой способ мог бы помочь. но браузер и процедура - это разные модули. Если я укажу в юзес модуль с браузером и налажу с ним нормальную работу, я потеряю универсальность модуля который работает с браузером. Можна в принципе решить этот вопрос через флаг, но тогда надо  будет этот флаг определить в отдельном классе чтоб получить ссылочный тип, но там тоже мороки куча...
PM MAIL   Вверх
MetalFan
Дата 10.2.2011, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



AlexLogos, ну мое дело предложить вариант. Не нравится - сделай по своему)


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Попробовал так как написал - создал клас, в нем переменная Boolean. Клас глобальный для модуля с браузером и как параметр для процедуры из другого модуля. Всеравно не то...

Добавлено через 51 секунду
Но, всеравно спасибо))))
PM MAIL   Вверх
MetalFan
Дата 10.2.2011, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(AlexLogos @  10.2.2011,  17:10 Найти цитируемый пост)
Всеравно не то...

а в чем проблема? OnDocumentComplete не вызывается? или вызывается раньше, чем надо?



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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Всеравно раньше чем надо...
PM MAIL   Вверх
AlexLogos
Дата 10.2.2011, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Народ, еще вопрос: когда динамически создаю WebBrowser, загружаю страницу методом Navigate потом програмно не могу заполнить форму. Процедура для заполнения формы работает только когда браузер виден на форме (даже если на другой вкладке допустим PageControl'а). Как починить?
PM MAIL   Вверх
MetalFan
Дата 10.2.2011, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



AlexLogos, да, без назначенного parent'а ВебБраузер работает некорректно - факт.
Назначь парента, а visible в false выстави.


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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Parent у WebBrousera - Read-Only Property...

Добавлено через 4 минуты и 35 секунд
Даже если создаю отдельную форму и ее делаю оунером при создании браузера - не работает. мало того браузер не отображается...
Код


var
WebBrow:TWebBrowser;
FM:TForm;
....
    FM:=TForm.Create(Self);
    with FM do
      begin
        Position:=poDesktopCenter;
        Width:=500;
        Height:=300;
        //Show;
      end;

    WebBrow:=TWebBrowser.Create(FM);
    //WebBrow.Parent:=FM;
    WebBrow.Visible:=True;
    WebBrow.Show;
    FM.Show;

PM MAIL   Вверх
AlexLogos
Дата 11.2.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Нашел в сети решение как присвоить Парента Браузеру
Код

TWinControl(WebBrow).Parent := FM;

После этого все заработало как часики, в том смысле что браузер появился на форме и позволил заполнить форму.
Решение к начальной задаче еще не найдено, но уже есть промежуточное которое можна начальству показать  smile.

PM MAIL   Вверх
AlexLogos
Дата 11.2.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



В общем чтоб сделать задержку я написал код:
Код

var d:cardinal;
.....
              d:=SecondOf(Now);
              while (SecondOf(Now)-d)<1 do
                Application.ProcessMessages;
.....

Этого времени браузеру хватило чтоб обработать форму и отправить запрос. Думаю что можна и меньше таймаут поставить, тогда придется работать с милисекундами, но это зависит не только от браузера но и от машины, поэтому оставлю пока так.
Вопрос решен.
PM MAIL   Вверх
cat512
Дата 11.2.2011, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: нет
Всего: 15



Цитата(AlexLogos @ 11.2.2011,  17:56)
В общем чтоб сделать задержку я написал код:
Код

var d:cardinal;
.....
              d:=SecondOf(Now);
              while (SecondOf(Now)-d)<1 do
                Application.ProcessMessages;
.....

Этого времени браузеру хватило чтоб обработать форму и отправить запрос. Думаю что можна и меньше таймаут поставить, тогда придется работать с милисекундами, но это зависит не только от браузера но и от машины, поэтому оставлю пока так.
Вопрос решен.

Хреновое решение. У тебя вся логика поломается, как только нагрузка на сервер увеличится.Тот код, который у тебя был (проверка COMPLETE)- рабочий. Я использовал подобный в связке с navigate.
В любом случае, для корректной работы, тебе надо привязываться к состоянию броузера.
PM MAIL   Вверх
AlexLogos
Дата 11.2.2011, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 23.4.2009

Репутация: нет
Всего: 1



Вообще-то продолжение кода...
Код

 d:=SecondOf(Now);
              while (SecondOf(Now)-d)<1 do
                Application.ProcessMessages;
//Жду завершения загрузки
              while WebBrow.Busy do
                Application.ProcessMessages;
//Получаю код страницы
              GetHTMLCode(WebBrow,tempResult);
//Обработка

Тоесть то же самое...

Добавлено @ 18:37
Задержка нужна чтоб браузер обработал форму, создал новый Get-запрос и отправил на сервак, и ждет ответа...

Это сообщение отредактировал(а) AlexLogos - 11.2.2011, 18:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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