Конференция "Сети" » Как после события TWebBrowser DownloadComplete вернуться в цикл! [D7, WinXP]
 
  • Lamer666 (05.12.07 12:00) [0]
    Доборый день уважаемые!

    While AdoQuery1.Eof=False do begin
     ...
    {Тут заполняю форму в TWEBBrowser-e}
     ...
    FormItem.Item(j).click;{Щелкаю на кнопку чтобы сохранить данные}

    В ЭТОМ месте мне надо узнать, сохранились ли данные корректно или НЕКОРРЕКТНО
    Для этого предпологаю дождаться пока прогрузится cтраничка TWEBBROWSER-а
    Вопрос: Как мне вернуться в этом местото цикла после события TWebBrowser DownloadComplete?
    Возможно есть какая то альтернатива?
    ...

    end;


    Спасибо!
  • Lamer666 (05.12.07 13:00) [1]
    Формулировка немного изменилась:
     
     FF('_contractDate',DateToStr(Date),WebBrowser1);
     BtnClick('_search',WebBrowser1); {Щелкаю на кнопку}
    Как в ЭТОМ МЕСТЕ ПОДОЖДАТЬ ПОКА ПРОГРУЗИТЬСЯ WEBBROWSER?И только потом продолжать выполнение команд!  ShowMessage(WebBrowser1.OleObject.Document.all.tags('TABLE').Item(3).Rows.Item(0 ).Cells.Item(0).InnerText);
    ...
    ...
    ...

  • Сергей М. © (05.12.07 13:34) [2]
    while WebBowser.Busy do begin
    sleep(0);
    Application.ProcessMessages
    end;
  • Lamer666 (05.12.07 14:22) [3]
    Чето не работает!
    : (
  • Сергей М. © (05.12.07 14:29) [4]
    Ну тады пробуй так:

    with WebBowser do
    while Busy or (ReadyState<>READYSTATE_COMPLETE) do begin
     sleep(0);
     Application.ProcessMessages
    end;

  • Lamer666 (05.12.07 14:29) [5]
    WebBowser.Busy становиться True после выполнения всех срок почему то?!
    То есть

     FF('_docDateReceived','20.03.2002',WebBrowser1);
     FF('_comment',3232026818000318',WebBrowser1);
     FF('
    _contractDate',DateToStr(Date),WebBrowser1);
     BtnClick('
    _search',WebBrowser1);{ЩЕЛКАЮ НА КНОПКЕ}
     While WebBrowser1.Busy do {WebBrowser1.Busy=Flase}
     begin
       Sleep(0);
       Application.ProcessMessages;
     end;
     ShowMessage(WebBrowser1.OleObject.Document.all.tags('
    TABLE').Item(3).Rows.Item(0 ).Cells.Item(0).InnerText);


    а вот теперь {WebBrowser1.Busy=Flase}
  • Lamer666 (05.12.07 14:32) [6]

    > Сергей М. ©   (05.12.07 14:29) [4]

    Сейчас попробую!
  • Сергей М. © (05.12.07 14:32) [7]

    > Lamer666   (05.12.07 14:29) [5]


    Почитай в справке про логику изменения состояния св-ва Бизи.
  • Rouse_ © (05.12.07 14:33) [8]
    Ну. А тебе после какой нужно чтобы он стал False?
  • Lamer666 (05.12.07 14:37) [9]

    > Rouse_ ©   (05.12.07 14:33) [8]

    опечатался:
    а вот теперь {WebBrowser1.Busy=TRUE}
    Надо что бы ПОСЛЕ ЩЕЛЧКА пока не прогрузиться WEBBrowser сообщение не выводилось!
  • umbra © (05.12.07 18:28) [10]
    Сделайте проверку на корректность заполнения и прочие нужные действия в обработчике
    OnDownloadComplete

  • Lamer666 (05.12.07 19:41) [11]

    > Сделайте проверку на корректность заполнения и прочие нужные
    > действия в обработчике OnDownloadComplete


    Это единственное решение которое нашел.

    А вообще не могу понять как МНЕ реализовать такую схему, в цикле перебирать значения в DbGrid-е и для каждого значения осуществлять проверку в WebBrowser-е. Проблема в ТОМ, что пока WebBrowser не "прогрузит" значение из DbGrid-а и не загрузить результат обработки, я не могу продолжать работу цикла и брать новый элемент для роверки.

    Что делать???
  • Сергей М. © (06.12.07 09:07) [12]

    > Lamer666   (05.12.07 19:41) [11]


    Ну так что скажешь по поводу [4], [6] ?
  • Lamer666 (06.12.07 10:34) [13]

    > Ну так что скажешь по поводу [4], [6] ?

    Не работает! Вот КОД:

    procedure TForm1.PngSpeedButton2Click(Sender: TObject);
    begin
     FF('_phoneNumber',AdoQuery1.FieldByName('phone').AsString,WebBrowser1);
     FF('_salePointCode','555555',WebBrowser1);
     FF('_contactPhone','83473215010',WebBrowser1);
     FF('_lastName','Иванов',WebBrowser1);
     FF('_firstName','Иван',WebBrowser1);
     FF('_midName','Иванович',WebBrowser1);
     FF('_birthday','17.01.1970',WebBrowser1);
     FF('_sexTypes','1',WebBrowser1);
     FF('_docSeries','2222',WebBrowser1);
     FF('_docNumber','55555',WebBrowser1);
     FF('_docDateReceived','20.03.2002',WebBrowser1);
     FF('_contractDate',DateToStr(Date),WebBrowser1);

     BtnClick('_search',WebBrowser1);
    {ТУТ WebBrowser1 еще не отправляет данные (почему то)}
    While WebBrowser1.Busy or (WebBrowser1.ReadyState<>READYSTATE_COMPLETE) do begin
      sleep(0);
      Application.ProcessMessages;
     end;
     ShowMessage(WebBrowser1.OleObject.Document.all.tags('TABLE').Item(3).Rows.Item(0 ).Cells.Item(0).InnerText);
    end;
    {А ВОТ ТУТ НАЧИНАЕТ ОТПРАВКУ ДАННЫХ}


    То есть прогрузка WebBriwser-а происходит после выполнения всех строк в процедуре TForm1.PngSpeedButton2Click, возможно ЭТО нормально? : (
  • Сергей М. © (06.12.07 11:23) [14]

    > Lamer666   (06.12.07 10:34) [13]


    ))

    Ты по-русски скажи - в тело цикла ты входишь или не входишь ?
  • Lamer666 (06.12.07 11:27) [15]

    > Ты по-русски скажи - в тело цикла ты входишь или не входишь
    > ?

    Извини, я же говорил что НЕТ, не вхожу!
  • Сергей М. © (06.12.07 11:42) [16]

    > я же говорил


    Где ты это говорил ? Ткни меня носом ..


    > ТУТ WebBrowser1 еще не отправляет данные (почему то)


    Вероятно потому что после вызова BtnClick следует сначала обработать оконные сообщения и лишь потом запускать тот самый цикл ожидания.
  • Lamer666 (06.12.07 11:47) [17]

    > Где ты это говорил ? Ткни меня носом ..


    Lamer666   (05.12.07 14:29) [5]
    ...
    While WebBrowser1.Busy do {WebBrowser1.Busy=Flase} Может и не явно : ))
    ...
  • Сергей М. © (06.12.07 11:53) [18]

    > Lamer666   (06.12.07 11:47) [17]


    Ну знаешь ли, я, к сож., не владею всеми местными диалектами эзопова языка)

    Так что изволь для пользы дела выражаться четко и ясно, мол, ни одна итерация этого цикла не выполнена по таким-то конкретным причинам)
  • Lamer666 (06.12.07 11:57) [19]
    Извини : )
  • Lamer666 (10.12.07 19:14) [20]
    Так что то НИЧЕГО и не получаеться : (
    И все же как организовать цикл (перебор записей ADOQuery) с ожиданием прогрузки WebBrowser-а для переходна к седующей записи?
  • Сергей М. © (11.12.07 08:17) [21]
    Показывай код ..
  • ЮЮ © (11.12.07 11:55) [22]
    > ТУТ WebBrowser1 еще не отправляет данные (почему то)}
    > While WebBrowser1.Busy or (WebBrowser1.ReadyState<>READYSTATE_COMPLETE)
    > do begin
    >  sleep(0);
    >  Application.ProcessMessages;
    > end;
    > ShowMessage(WebBrowser1.OleObject.Document.all.tags('TABLE')
    > .Item(3).Rows.Item(0 ).Cells.Item(0).InnerText);
    > end;
    > {А ВОТ ТУТ НАЧИНАЕТ ОТПРАВКУ ДАННЫХ}


    Потому что мменно Application.ProcessMessages позволяет тебе временно приостановить данный код и "нагрузить" WebBrowser1, а ты проверяешь WebBrowser1.Busy до Application.ProcessMessages. Замени While на repeat или дополни выражение так, чтобы хоть раз тело цикла выполнилось.
  • Lamer666 (11.12.07 20:08) [23]

    > ЮЮ ©   (11.12.07 11:55) [22]

    Сейчас БУДУ ПРОБОВАТЬ.
    Большое спасибо: ЮЮ и Сергей М.
    : ))
  • Lamer666 (11.12.07 22:24) [24]
    Супер!
    Application.ProcessMessages;
    While WebBrowser1.Busy do begin
     sleep(0);
     Application.ProcessMessages;
    end;

    НА УРА работает!
    Спасибо большое ЮЮ и Сергей М.
 
Конференция "Сети" » Как после события TWebBrowser DownloadComplete вернуться в цикл! [D7, WinXP]
Есть новые Нет новых   [134431   +10][b:0][p:0.003]