Форум программистов, компьютерный форум, киберфорум
Alex_pac
Войти
Регистрация
Восстановить пароль

Delphi запуск JavaScript [jsWebBrowser 3]

Запись от Alex_pac размещена 18.07.2012 в 13:13
Показов 14394 Комментарии 1
Метки delphi, javascript

Модуль jsWebBrowser 3

http://jqbook.narod.ru/delphi/javascript.htm <<- официальная страница

Нажмите на изображение для увеличения
Название: jsEmbeded.png
Просмотров: 801
Размер:	46.3 Кб
ID:	946

Модуль позволяет легко и просто использовать JavaScript страницы через стандартный компонент TWebbrowser или TEmbededWB

Имеются функции для легкого обращения к DOM элементам страницы.

В модуле предусмотрены функции по управлению событиями элементов страницы на уровне программы.

Список типов

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
IHTMLElement = MSHTML.IHTMLElement;
  IHTMLelements = Array of IHTMLElement;
  IHTMLWindow2 = MSHTML.IHTMLWindow2;
  IHTMLElement2 = MSHTML.IHTMLElement2;
  IHTMLDocument2 = MSHTML.IHTMLDocument2;
  // короткие дубликаты типов
  Helem = MSHTML.IHTMLElement;
  Helems = Array of IHTMLElement;
  HWin = MSHTML.IHTMLWindow2;
  Helem2 = MSHTML.IHTMLElement2;
  Hdoc = MSHTML.IHTMLDocument2;
 
  TSimpleEvent = procedure of object;
Procedure TEmbeddedWB. JqueryLoad;

Процедура подключает Jquery 1.3 к любой странице.
Если уже подключен по ничего не делает.

Сам Jquery хранится в ресурсе Jquery.res

Инициализация ресурса производится автоматически. Ресурс лежит в глобальной переменной

Delphi
1
var  Jquery: TStringStream;
Procedure TEmbeddedWB. RunJS ( js:string );

Js – текст скрипта

запуск JS скрипта любого содержания, за исключением объявления функций.

они все равно будут видны только внутри этого кода, то есть неглобальны

JS разумеется, относится, и выполняет все действия на странице, которая сейчас открыта в этом TEmbeddedWB

Function TEmbeddedWB. GetJsParam ( param:string ):string;

param – выражение JS которое должно чтото вернуть в качестве строкового, логического или числового значения.

функция возращает значение JS выражения

Delphi
1
2
3
4
var str: string;
str := WEBrowser.GetJsParam('2+2'); // '4'
str := WEBrowser.GetJsParam('document.form[0].mypole.value'); // 'значение поля'
str := WEBrowser.GetJsParam('par'); // значение переменной par внутри JS
procedure TEmbeddedWB. getJsStrings( param:string; strings: TStrings );

param – выражение JS которое должно чтото вернуть в качестве одномерного массива.
процедура возвращает значение JS одномерного массива в ввиде строкового листа

Delphi
1
2
3
4
5
6
7
8
var strL: TStringList;
strL:= TStringList.Create;
WEBrowser.RunJS('var massiv = [1,4,8,34];'); // объявление массива внутри JS
WEBrowser.getJsStrings('massiv',strL); // получение значения массива
ShowMessage(strL.text);
strL.free; // после использования не забываем очищать строковый лист
// содержимое strL  - несколько строк со значениями 1,4,8,34
end;

procedure TEmbeddedWB. getElementsByClassName
(tag,classname: string; var elements: Helems; attr: string = ''; value: string = '');


Записывает в elements все элементы удоволетворяющие следующим условиям

tag = название тега
classname = принадлежность к классу
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.


procedure TEmbeddedWB. getElementsByTagName
(tag:string; var elements: Helems; attr: string = ''; value: string = '');


Записывает в elements все элементы удоволетворяющие следующим условиям

tag = название тега
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.


function TEmbeddedWB.getElementByTagName
(tag:string; attr: string = ''; value: string = ''):Helem;


Ищет элемент удоволетворяющий условиям

tag = название тега
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.

Если элемент не найден вызывается Exception и сообщение об ошибке что элемент не найден


function TEmbeddedWB.getElementByClassName
(tag,classname: string; attr: string = ''; value: string = ''):Helem;


Ищет элемент удоволетворяющий условиям

tag = название тега
classname = название класса
attr = название аттрибута
value = значение аттрибута

если attr = '' то фильтрация по attr игнорируется.

Если элемент не найден вызывается Exception и сообщение об ошибке что элемент не найден

Function TEmbeddedWB. getElementById(tag,id:string):Helem;

Возвращает элемент-объект IHTMLelement(Helem) по id и тегу

tag – название тега для поиска
id – идентификатор элемента страницы

Если элемент не найден вызывается Exception и сообщение об ошибке что элемент не найден

function getBody: Helem2;

Возвращает объект IHTMLElement2(Helem2) соответсвующий Body страницы.

Function TEmbeddedWB. getDocument:Hdoc;

Возвращает объект IHTMLDocument2(Hdoc) соответсвующий Document страницы.

Delphi
1
2
// показать исходный код
memo1.Text:=WebBrowser1.getDocument.body.innerHTML;
Управление событиями

В модуле предусмотрены 2 процедуры. Обеспечиващие установку событий на элементы страницы, которые будут запускать события в программе.

function CreateHTMLEvent(

const Elem: Helem;
const OnEvent: TSimpleEvent

):IDispatch;


Функция проводит установку события на элемент страницы.

elem - IHTMLElement(Helem) элемент страницы
OnEvent - TSimpleEvent (procedure of Object);

Синтаксис:

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button13Click(Sender: TObject);
var el:Helem;
begin
  // Delphi кнопка 3
  el:=WebBrowser1.getElementById('button','delphi_button');
  el.onclick:=CreateHTMLEvent(el, Delphi_button);
end;
в данном случаем событие Delphi_button имеет вид:

Delphi
1
2
3
4
5
procedure TForm1.Delphi_button;
begin
  ShowMessage('Кнопка 3 нажата (Событие Delphi)'+#13+'Цвет формы будет изменен');
  self.Color:=random(16777215);
end;
function DestroyHtmlEvent(const Elem: Helem):IDispatch;

Функция проводит очистку события на элементе страницы.

elem - IHTMLElement(Helem) элемент страницы

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button13Click(Sender: TObject);
var el:Helem;
begin
  // Delphi кнопка 3 удалить событие
  el:=WebBrowser1.getElementById('button','delphi_button');
  el.onclick:=DestroyHtmlEvent(el);
end;
Метки delphi, javascript
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий

    Файлы

    Не могу найти по ссылке jswebbrowser.pas и его ресурс jquery.res

    Покажите, где, или дайте ссылку
    Запись от grigandal1580 размещена 13.12.2016 в 18:04 grigandal1580 вне форума
 
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru