Використання компонента twebbrowser, КомпьютерПресс

базові операції

Для того щоб використовувати TWebBrowser в своїй програмі, слід розмістити на формі відповідний компонент, наявний на закладці Internet. Потім, для відображення в ньому сторінки HTML, необхідно викликати його метод Navigate:

Розглянемо докладніше параметри, що передаються в метод Navigate.

Інші параметри не є обов'язковими і служать для передачі додаткової інформації (табл. 1).

Найбільш цікавим є параметр PostData, що дозволяє передати на Web-сервер дані, отримані в результаті заповнення форми, якщо цей сервер вимагає HTTP - транзакції POST. Так, наступний фрагмент коду передає на сервер ім'я користувача і пароль, заповнені в формі Delphi:

Наприклад, на Web-сервері цей запит може бути оброблений, наступним ASP-скриптом:

Після того як дані отримані, необхідно надати користувачеві можливість роботи з ними. Багато функцій TWebBrowser доступні через метод ExecWB, що надає простий спосіб звернення до інтерфейсу IOleCommandTarget. Цей метод має такий вигляд:

CmdID може бути однією з констант OLECMDID, визначених у файлі ShDocVw.pas.

Параметр cmdexecopt може приймати одне з чотирьох значень, наведених в табл. 2.

Параметри pvaIn і pvaOut є додатковими і залежать від конкретної команди.

Є можливість запросити у TWebBrowser доступність тієї чи іншої команди за допомогою функції:

Функція повертає бітову маску із значень, наведених в табл. 3.

Отже, можна налаштовувати інтерфейс в залежності від підтримуваних поточною версією TWebBrowser можливостей:

Для друку вмісту TWebBrowser служить команда OLECMDID_PRINT. Метод друку може виглядати, зокрема, наступним чином:

Блок try ... except ... end необхідний з тієї причини, що TWebBrowser при виконанні будь-якої команди за допомогою ExecWB генерує виняток EOleException з кодом:

Починаючи з Internet Explorer 5 документовані додаткові команди, підтримувані через інтерфейс IOleCommandTarget. Вони суттєво розширюють можливості по управлінню компонентом, проте недоступні або не задокументовані в версії 4. Це створює певні складнощі при програмуванні. Так, щоб організувати пошук всередині завантаженої сторінки, необхідний наступний код:

Використання недокументованих виклику в даному випадку виправдано, так як у версії 4 цей виклик вже не буде змінюватися, а у версії 5 ми виявляємо і використовуємо документований метод. У той же час IE4 поки ще досить поширений, так що буде недоцільно повністю позбавляти програму можливості пошуку на таких комп'ютерах.

Тонка настройка

Якщо потрібно більш тонка настройка компонента, то необхідно реалізувати інтерфейс IDocHostUIHandler, що дозволяє програмісту взяти під контроль поведінку TWebBrowser.

Інтерфейс оголошений як:

Спадкоємець TWebBrowser, який реалізує цей інтерфейс, повинен бути оголошений так:

На нашому CD-ROM наведено код такого компонента. реалізує мінімальну функціональність. Ви можете використовувати його як основу для створення своїх розширених спадкоємців TWebBrowser.

А тепер розглянемо найбільш цікаві, з точки зору програміста, методи інтерфейсу IDocHostUIHandler.

Почнемо з методу ShowContextMenu:

Ця функція викликається в тому випадку, коли TWebBrowser повинен показати контекстне меню. Якщо ви відображаєте власне меню або хочете придушити меню, то функція повинна повернути S_OK, а якщо меню має показати TWebBrowser - то S_FALSE.

У функцію передаються такі параметри:

1. DwID - ідентифікатор меню, який може приймати одне з наступних значень:

Залежно від значення ідентифікатора ви можете вивести відповідне меню.

2. ppt - координати, в яких має бути показано меню.

3. pcmdtReserved - інтерфейс IOleCommandTarget, що дозволяє запросити стан команд і їх виконання.

4. pdispReserved - інтерфейс IDispatch об'єкта, для якого викликається меню.

Найпростіша реалізація цього методу може виглядати наступним чином:

Для повної заборони контекстного меню метод повинен завжди повертати S_OK.

Наступний метод, який ми розглянемо - GetHostInfo:

Додаток може заповнити структуру pInfo, визначену як:

Тут dwFlags - бітова маска з наступних прапорів, наведених в табл. 4. а dwDoubleClick задає реакцію на подвійне клацання мишею і може приймати одне із значень, наведених в табл. 5.

Метод повинен повернути S_OK або код помилки OLE.

Наприклад, щоб створити вікно з плоскими смугами прокрутки і без тривимірної рамки, необхідно реалізувати цей метод таким чином:

дозволяє перехопити виконання команд і обробку «гарячих» клавіш і замінити її на свою.

дозволяє задати шлях в реєстрі, який TWebBrowser буде використовувати для зберігання налаштувань. Це дає можливість, зокрема, зробити який використовується в програмі компонент незалежним від поточних налаштувань Internet Explorer.

Шлях повинен міститися в ключі реєстру HKEY_CURRENT_USER.

Типова реалізація цього методу може виглядати так:

Існує ряд налаштувань, які, незважаючи на наявність обробника GetOptionKeyPath, в будь-якому випадку беруть зі стандартних параметрів Internet Explorer. Найбільш важливими з них є колонтитули, використовувані при друку. У версіях Internet Explorer до 5.5 включно єдиним способом змінити (або придушити) колонтитули є запис нових значень в ключ реєстру:

перед друком і відновлення їх після друку.

А тепер поговоримо про метод

Він дозволяє повернути покажчик на реалізований в вашому додатку інтерфейс IDispatch, який буде доступний для скриптів в TWebBrowser. Якщо ви не реалізуєте цей інтерфейс, то параметр ppDispatch повинен бути встановлений рівним NIL. Метод повертає S_OK в разі успіху або код помилки OLE в разі помилки.

Методи цього інтерфейсу доступні з скриптів, які виконують в TWebBrowser наступним чином:

Реалізувати IDispatch можна, наприклад, за допомогою класу TAutoObject.

Метод TranslateURL дозволяє змінити URL, за яким здійснюється завантаження сторінки.

pchURLIn вказує на рядок, що містить вихідний URL. Якщо ваш додаток здійснює трансляцію, то воно повинно виділити пам'ять під нове значення, використовуючи функцію CoTaskMemAlloc, заповнити буфер новим значенням URL і повернути S_OK.

В іншому випадку ви повинні привласнити ppchURLOut значення NIL і повернути S_FALSE. При виникненні помилки метод повинен повернути OLE-код помилки.

Оброблювач викликається тільки при інтерактивному переході по посиланню з TWebBrowser і не викликається при переході за допомогою методу Navigate.

Доступ до документної моделі TWebBrowser

В Internet Explorer реалізовано розширення HTML, зване Dynamic HTML (DHTML). Ця модель являє все елементи HTML-документа у вигляді набору колекцій об'єктів, доступних для зміни. Скрипти, вбудовані в сторінки і додатки і мають доступ до цих колекцій, можуть знаходити і змінювати їх елементи, а також додавати нові, причому зміни будуть негайно відображені у вікні TWebBrowser. Ієрархічне об'єктне уявлення HTML-об'єктів називається DOM (Document Object Model).

Програмісту DOM в елементі управління IE ActiveX доступна у вигляді набору COM-інтерфейсів. Відправною точкою для доступу до неї служить властивість:

Це властивість забезпечує доступ до інтерфейсу IHtmlDocument2, що дозволяє працювати з вмістом документа. Для отримання інтерфейсу необхідно запросити його за допомогою оператора as:

Документ в DOM являє собою набір колекцій елементів. Для доступу до колекції служить інтерфейс IHtmlElementCollection, а до елементу колекції - IHtmlElement. Наступний приклад виводить всі теги, наявні в поточному документі і текст всередині тегів:

Крім того, можливо динамічне створення документів в пам'яті, без необхідності записи їх на диск і виклику методу Navigate з протоколом 'file: //'

Проілюструємо роботу з документарної моделі TWebBrowser на конкретному прикладі. Розташуємо на формі компоненти TWebBrowser, TMemo і три TButton, а потім створимо такі обробники подій:

У Memo1.Lines запишемо такий текст:

Отже, ми отримали можливість динамічно створювати HTML-документи і надавати їх користувачеві.

Зовсім недавно компанія Cougar представила нову серію блоків живлення для традиційних ПК - VTX, орієнтовану на користувачів з обмеженим бюджетом. У цьому огляді буде розглянута модель Cougar VTX600, яка завдяки своїм характеристикам буде однією з найбільш затребуваних в цій лінійці блоків живлення

На щорічному заході Capsaicin SIGGRAPH в Лос-Анджелесі компанія AMD зміцнила свої позиції на ринку ПК класу high-end з новими процесорами Ryzen Threadripper і GPU «Vega»

Для простого і зручного побудови мереж рядовими користувачами компанія ZyXEL випустила чергову версію свого Інтернет-центру для підключення до мереж 3G / 4G через USB-модем з точкою доступу Wi-Fi - ZyXEL Keenetic 4G III, який ми і розглянемо в цьому огляді

До своєї і так великій родині роутерів і маршрутизаторів фірма ASUS недавно додала дві вельми цікаві моделі: флагманську 4G-AC55U і більш просту 4G-N12. У даній статті буде розглянута флагманська модель ASUS 4G-AC55U

Молода, але амбіційна компанія KREZ на початку цього року випустила нову, оригінальну модель ноутбука KREZ Ninja (модель TM1102B32) під керуванням Windows 10. Оскільки цей комп'ютер має поворотний екран, він може служити універсальним рішенням - його можна з успіхом використовувати і для роботи, і для навчання, і для ігор

Якщо ви часто друкуєте фотографії та вже втомилися міняти картриджі в своєму принтері, зверніть увагу на МФУ Epson L850. Великий ресурс витратних матеріалів, чудова якість відбитків, найширший набір функціональних можливостей - ось лише деякі з переваг даної моделі

Схожі статті