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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1281332239
6ruse
2010-08-09 09:37
2010.10.31
FireBird, Delphi


15-1279906954
Ламо777
2010-07-23 21:42
2010.10.31
Хоть я и не моряк, но тронуло


2-1280911010
adminwik
2010-08-04 12:36
2010.10.31
Вопрос по sql


2-1280993419
12
2010-08-05 11:30
2010.10.31
Что-то глючит, AV непонятно-плавающий.


6-1228160302
uw
2008-12-01 22:38
2010.10.31
Подключение через VMware Network Adapter