Приклад розширення можливостей TWebBrowser

Автор: Кисельов Роман ТОВ "Салон 2116" Джерело: RSDN Magazine #5-2005

приклад

Компоненти з назвами TWebBrowser із бібліотеки VCL або WebBrowser із NET Framework 2.0 викликають непідробний інтерес, тому що надають можливість не лише відображення документів HTML, а й автоматизації браузера. Але якщо компонент System.Windows.Forms.WebBrowser пропонує багатий інструментарій для керування своєю поведінкою, то мінімум, реалізований у TWebBrowser, причому реалізований автоматичним імпортом бібліотекиshdocvw.dll (Microsoft Internet Controls), змушує задуматися про те, як допрацювати TWebBrowser.

Реалізувати компонент TWebBrowser з VCL можна за лічені секунди в такий спосіб. Запустивши середу Delphi, виберіть у меню «Component» «Import Component…», імпортуйте бібліотеку типів із shdocvw.dll – і компонент готовий! Створений середовищем у процесі імпорту модуль SHDocVw_TLB.pas є модуль SHDocVw.pas зі стандартної поставки Delphi.

Вихідні тести прикладів до статті мають файли проектів для BDS 2006. Однак жодних можливостей BDS 2006, несумісних з Delphi 2005 і, можливо, Delphi 7, у вихідних текстах і ресурсах не використовується. При згадці про VCL я маю на увазі виключно Win32 VCL, а не NET VCL. Крім того, під браузером розуміється Internet Explorer.

Що не влаштовує?

Створимо формуForm1: TForm, розмістивши на ній компонентиWebBrowser1: TWebBrowser,Edit1: TEditдля введення URL та кнопкуButton1: TButton, при натисканні на якуWebBrowser1: TWebBrowser(головний герой нашої розповіді) виконуватиме перехід по URL. В обробнику натискання на кнопку скористаємося одним із методів TWebBrowser.Navigate для відображення браузером сторінки ззаданим URL. Повинно вийти приблизно так:

Результат вражає. Справді помітно, що Delphi — середовище швидкої розробки програм: кілька рухів мишею, рядок коду в обробнику, і готовий браузер! З іншого боку, не викликає сумніву, що за всім цим ховається міць технології СОМ, без якої нам також не обійтися.

Стратегія захоплення

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

Інтуїція розробника під Windows змушує підозрювати, що без COM нічого не відбувається. Саме, заглянувши вMSDN / Web Development / Internet Explorer Development / Programming and Reusing the Browser, стає очевидним, що, реалізувавши інтерфейсиIDocHostUIHandlerтаIDocHostShowUI, крім бажаного заборони на «гарячі» клавіші та контекстне меню, вдається отримати можливість розширення DHTML, контролю над діалоговими вікнами та довідкою, а також керування багатьма іншими функціями браузера.

Отриманий IDL-текст за допомогою транслятора MIDL із Platform SDK (його можна знайти також у каталозіBinсередовища Delphi) перетворюємо на бібліотеку типів TLB, яка дуже просто імпортується за допомогою команд «Component» «Import Component…»

Щоб не витрачати час, використовуйте готові файли з архіву до статті.

Для завершення створення необхідної інфраструктури успадковуємо новий компонент відTWebBrowserнаступним чином: