Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.11;
Скачать: CL | DM;

Вниз

Как после события TWebBrowser DownloadComplete вернуться в цикл!   Найти похожие ветки 

 
Lamer666   (2007-12-05 12:00) [0]

Доборый день уважаемые!

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

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

end;

Спасибо!


 
Lamer666   (2007-12-05 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);
...
...
...


 
Сергей М. ©   (2007-12-05 13:34) [2]

while WebBowser.Busy do begin
sleep(0);
Application.ProcessMessages
end;


 
Lamer666   (2007-12-05 14:22) [3]

Чето не работает!
: (


 
Сергей М. ©   (2007-12-05 14:29) [4]

Ну тады пробуй так:

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


 
Lamer666   (2007-12-05 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   (2007-12-05 14:32) [6]


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

Сейчас попробую!


 
Сергей М. ©   (2007-12-05 14:32) [7]


> Lamer666   (05.12.07 14:29) [5]


Почитай в справке про логику изменения состояния св-ва Бизи.


 
Rouse_ ©   (2007-12-05 14:33) [8]

Ну. А тебе после какой нужно чтобы он стал False?


 
Lamer666   (2007-12-05 14:37) [9]


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

опечатался:
а вот теперь {WebBrowser1.Busy=TRUE}
Надо что бы ПОСЛЕ ЩЕЛЧКА пока не прогрузиться WEBBrowser сообщение не выводилось!


 
umbra ©   (2007-12-05 18:28) [10]

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


 
Lamer666   (2007-12-05 19:41) [11]


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


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

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

Что делать???


 
Сергей М. ©   (2007-12-06 09:07) [12]


> Lamer666   (05.12.07 19:41) [11]


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


 
Lamer666   (2007-12-06 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, возможно ЭТО нормально? : (


 
Сергей М. ©   (2007-12-06 11:23) [14]


> Lamer666   (06.12.07 10:34) [13]


))

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


 
Lamer666   (2007-12-06 11:27) [15]


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

Извини, я же говорил что НЕТ, не вхожу!


 
Сергей М. ©   (2007-12-06 11:42) [16]


> я же говорил


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


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


Вероятно потому что после вызова BtnClick следует сначала обработать оконные сообщения и лишь потом запускать тот самый цикл ожидания.


 
Lamer666   (2007-12-06 11:47) [17]


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


Lamer666   (05.12.07 14:29) [5]
...
While WebBrowser1.Busy do {WebBrowser1.Busy=Flase} Может и не явно : ))
...


 
Сергей М. ©   (2007-12-06 11:53) [18]


> Lamer666   (06.12.07 11:47) [17]


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

Так что изволь для пользы дела выражаться четко и ясно, мол, ни одна итерация этого цикла не выполнена по таким-то конкретным причинам)


 
Lamer666   (2007-12-06 11:57) [19]

Извини : )


 
Lamer666   (2007-12-10 19:14) [20]

Так что то НИЧЕГО и не получаеться : (
И все же как организовать цикл (перебор записей ADOQuery) с ожиданием прогрузки WebBrowser-а для переходна к седующей записи?


 
Сергей М. ©   (2007-12-11 08:17) [21]

Показывай код ..


 
ЮЮ ©   (2007-12-11 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   (2007-12-11 20:08) [23]


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

Сейчас БУДУ ПРОБОВАТЬ.
Большое спасибо: ЮЮ и Сергей М.
: ))


 
Lamer666   (2007-12-11 22:24) [24]

Супер!
Application.ProcessMessages;
While WebBrowser1.Busy do begin
 sleep(0);
 Application.ProcessMessages;
end;
НА УРА работает!
Спасибо большое ЮЮ и Сергей М.



Страницы: 1 вся ветка

Текущий архив: 2009.01.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.019 c
4-1203943522
Gool
2008-02-25 15:45
2009.01.11
WIN API


2-1227705341
MS
2008-11-26 16:15
2009.01.11
Указатель на тип string


9-1176816254
marsel
2007-04-17 17:24
2009.01.11
Glmisc.pas ругается


2-1227961713
AlexDan
2008-11-29 15:28
2009.01.11
Программно выключить дсплей..


2-1227719125
programmer90
2008-11-26 20:05
2009.01.11
Функции распознавание цвета и координат пикселя