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

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

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

Модуль jsWebBrowser 3

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

Нажмите на изображение для увеличения
Название: jsEmbeded.png
Просмотров: 760
Размер:	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 вне форума
 
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru