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

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

Запись от Alex_pac размещена 18.07.2012 в 13:13
Показов 14380 Комментарии 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 вне форума
 
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru