Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Вниз

TWebBrowser и события элементов формы   Найти похожие ветки 

 
stas ©   (2010-07-19 10:13) [0]

Есть html форма, на которой находится элемент комбобокс. Пытаюсь его заполнить с помощью TWebbrowser, все получается, но у этому комбобоксу присвоено событие onchange и обработчик JavaScript.
И это событие не срабатывает, подскажите пожалуйста как заставить его выполниться?
делаю так:
...
field := theForm.Item(fieldName,instance) as IHTMLElement;
...
selectField := field as IHTMLSelectElement;
...
selectField.selectedIndex:=i;


 
И. Павел ©   (2010-07-19 13:54) [1]

Можно запустить этот скрипт вручную:

...
 WB_Doc : IHTMLDocument2;
 WB_HTMLWindow : IHTMLWindow2;
...
Begin
...  
 WebBrowser1.Document.QueryInterface(IHTMLDocument2, WB_Doc);
 if WB_Doc = nil then Error("При получении интерфейса взаимодействия с браузером возникла ошибка.");
 WB_HTMLWindow := WB_Doc.parentWindow;
 if WB_HTMLWindow = nil then Error("При получении интерфейса окна возникла ошибка.");
 WB_HTMLWindow.ExecScript("MyScript(100, 200, 300)", "JavaScript");


 
stas ©   (2010-07-19 16:54) [2]

И. Павел ©   (19.07.10 13:54) [1]
Спасибо, нашел чуть проще.
OleVariant(selectField as IHTMLElement).FireEvent("onchange");


 
stas ©   (2010-07-21 16:16) [3]

Теперь возник следующий вопрос, как дождаться окончания выполнения java скрипта ?

Заранее благодарен.


 
Дмитрий С ©   (2010-07-22 09:15) [4]


> Теперь возник следующий вопрос, как дождаться окончания
> выполнения java скрипта ?
>

Реализовать OnGetExternal ?


 
И. Павел ©   (2010-07-22 09:28) [5]

> [3] stas ©   (21.07.10 16:16)

А мой метод ждет выполнения скрипта и только потом возвращает управление программе :)


 
stas ©   (2010-07-22 10:13) [6]

И. Павел ©   (22.07.10 09:28) [5]
Да там параметры нужно передавать :)

Дмитрий С ©   (22.07.10 09:15) [4]
это как ?


 
анонимно   (2010-07-22 17:17) [7]


> это как ?

У обычного TWebBrowser-а нет такого события. Два варианта, либо реализовать самому (не знаю как), либо поставить компонент TEmbeddedWB (более реализованный TWebBrowser).
Там есть событие OnGetExternal в коде которого ты должен передать браузеру ссылку на твой объект, реализующий позднее связывание (интерфейс IDispatch). Это не сложно сделать, в дельфи есть возможность "научить" почти любой объект поддерживать этот интерфейс.
В коде страницы на javascript-е ты можешь обращаться к объекту очень просто:
external.SomeMethod(someParams);

Более того, в параметрах можно передавать объекты javascript и выполнять их методы из delphi.

Могу дать пример.


 
stas ©   (2010-07-22 17:34) [8]

анонимно   (22.07.10 17:17) [7]
Спасибо
TEmbeddedWB - установлен. Попробую.



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

Форум: "Прочее";
Текущий архив: 2010.10.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1280958303
Ярослав
2010-08-05 01:45
2010.10.31
D2010 и ресурсы


2-1281369967
DROWSY
2010-08-09 20:06
2010.10.31
TIBCustomDataSet .RecordCount


2-1281417193
И. Павел
2010-08-10 09:13
2010.10.31
Два почти одинаковых запроса выполняются по разному


2-1280974168
Soi
2010-08-05 06:09
2010.10.31
Цикл.Сохранение в цикле предыдущего значения


2-1281008416
Irisss
2010-08-05 15:40
2010.10.31
Две панели в TaskBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский