HtmlElement.click problem

0

Korzystam z procedury która m.in. wysyła click do przycisku znajdującgo sie w oknie IE. Kliknięcie powoduje otwarcie okienka dialogowego Microsoft Internet Explorer.
Problem polega na tym, że po otwarciu tego okienka dalsze linie kodu nie są wykonywane.
Dopiero ręczne zamknięcie tego okienka (kliknięcie na button OK lub Cancel) wznawia wykonywanie procedury. Wygląda to tak jakby pojawiające się okienko wstrzymywało wykonywanie programu?

kawałek kodu:

All := Document.All;
HtmlElement:= All.item(I,0) as IhtmlElement;
If (HTMLElement.tagName='INPUT') and (HTmlElement.id='OK') then
HtmlElement.click;

Proszę o jakąś wskazówkę

0

utwórz nowy wątek i w nim wykonaj to, co blokuje program.

[dopisane]
to chyba oczywiste, że niektóre okna modalne blokują kod, przecież musisz poczekać na użytkownika, żeby coś przeczytał i nacisnął, i w zależności od tego, co nacisnął, wykonać kod dalej.

0

utwórz nowy wątek i w nim wykonaj to, co blokuje program.

Też o tym myślałem, ale chciałbym zrozumieć co sie dzieje.
Wykonanie HtmlElement.click nie blokuje programu, bo dla innych przycisków na stronie działa bez zarzutu.
Wygląda na to że program jest blokowany wskutek otwarcia zwykłego okna dialogowego, ale jak to możliwe? - z chwilą zamkniecia tego okienka wykonywana jest reszat procedury!!!
Programu nie blokują też linie kodu następujące po HtmlElement.click (jest to niezależne od tego co znajduje się po komendzie HtmlElement.click).

JAK OKNO DIALOGOWE MOŻE WYMUSIĆ ZATRZYMYWANIE OBCEGO PROGRAMU?

0

to chyba oczywiste, że niektóre okna modalne blokują kod, przecież musisz poczekać na użytkownika, żeby coś przeczytał i nacisnął, i w zależności od tego, co nacisnął, wykonać kod dalej.

Jasne, że w sytuacji gdy się pojawia okienko modalne wykonanie kodu jest wstrzymywane do chwili podjęcia przez użytkownika decyzji (np. kliknięcia przycisku OK lub Cancel), ale w przypadku, o którym piszę jest trochę inna sytuacja. Mamy bowiem dwie aplikacje: Przglądarkę IE (w niej pola edycyjne, przyciski itp) oraz osobny program (ma wypełnić co trzeba i klinąć przycisk wyślij). Wysłanie kliknięcia do przycisku 'wyślij' działa i powoduje wyświetlenie okienka modalnego, co blokuje wykonywanie kodu przez przeglądarkę do czasu podjęcia decyzji przez użytkownika, ale BLOKUJE TEŻ PROGRAM, KTÓRY WYSŁAŁ KLIKNIĘCIE.

Rozumiem to tak: przeglądarka widzi, że kliknięcie zostało wysłane przez mój program, wysyła do niego jakiś komunikat i oczekuje odpowiedzi: do czasu otrzymania odpowiedzi blokuje dalsze wykonywanie kodu mojego programu.

W związku z tym mam pytanie:

  1. Jak odpowiedzieć przeglądarce, czyli jak programowo kliknąć np. przycisk 'OK' w pojawiającym się okienku modalnym???
0

Jakoś sobie z tym poradziłem: podzieliłem procedurę na dwa kawałki i każdy z nich umieściłem w osobnym wątku - i działa.

Coś mi sie jednak wydaje, że to jest jak pieprzenie kotka przy pomocy młotka i zamiast tak kombinować jak koń pod górę można to załatwić elegancko kilkoma liniami kodu.

Nadal szukam innego rozwiazania problemu (dla mnie oczywiście ;-)).

Ludzie wskażcie ślepcowi drogę!

0

Hmmm... Jeśli dobrze zrozumiałem, to wysłałeś informację przeglądarce, że kliknąłeś na przycisk. Prawdopodobnie w jakiś sposób twój program zaczął oczekiwać na zakończenie okienka (nie wierzę, by przeglądarka zablokowała twój program sama). W związku z tym twój program potraktował okienko przeglądarki jak swoje. Dlaczego? Nie wiem...

0

Hmmm... Jeśli dobrze zrozumiałem, to wysłałeś informację przeglądarce, że kliknąłeś na przycisk.

Tak, przy pomocy IHTMLElement.click

Prawdopodobnie w jakiś sposób twój program zaczął oczekiwać na zakończenie okienka (nie wierzę, by przeglądarka zablokowała twój program sama). W związku z tym twój program potraktował okienko przeglądarki jak swoje. Dlaczego? Nie wiem...

Może jest jakiś sposób, żeby zasugerować programowi żeby olał okienko???

BTW, podział na wątki jest tylko obejściem problemu i działa tylko dlatego, że wątki "dzieją się" równolegle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1