Пример за разширяване на възможностите на TWebBrowser

Автор: Киселев Роман
LLC "Салон 2116"
Източник: Списание RSDN № 5-2005

Delphi среда

Компонентите с име TWebBrowser от VCL или WebBrowser от NET Framework 2.0 представляват голям интерес, тъй като предоставят възможност не само за показване на HTML документи, но и за автоматизиране на браузъра. Но ако компонентът System.Windows.Forms.WebBrowser предлага богат набор от инструменти за контролиране на поведението му, тогава минимумът, внедрен в TWebBrowser, освен това, реализиран чрез автоматично импортиране на библиотеката shdocvw.dll (Microsoft Internet Controls), ви кара да мислите как да модифицирате TWebBrowser.

Компонентът VCL TWebBrowser може да бъде реализиран за секунди, както следва. Когато Delphi работи, изберете 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 и бутона Бутон1: Бутон T, когато щракнете върху коя WebBrowser1: TWebBrowser (главният герой на нашата история) ще последва URL адреса. В манипулатора на щракване върху бутона ще използваме един от методите TWebBrowser.Navigate, за да покажем страницата с посочения URL от браузъра. Тя трябва да изглежда по следния начин:

Резултатът е впечатляващ. Наистина е забележимо, че Delphi е среда за бързо разработване на програма: няколко движения на мишката, ред код в манипулатора и имаме готов браузър! От друга страна, няма съмнение, че зад всичко това се крие силата на COM технологията, без която също не можем.

Стратегия за улавяне

За да деактивирате горещите клавиши и контекстното меню, можете да използвате SetWindowsHookEx. Този подход обаче не дава твърде много.

Интуицията на разработчик на Windows ви кара да подозирате, че нищо не се случва без COM. А именно, търсене в MSDN/Уеб разработка/Разработка на Internet Explorer/Програмиране и повторно използване на браузъра, става очевидно, че чрез внедряване на интерфейсите IDocHostUIHandler и IDocHostShowUI, в допълнение към желаната забрана на клавишните комбинации и контекстните менюта, е възможно да получите възможност за разширяване на DHTML, контрол върху диалоговите прозорци и помощ, както и контрол на много други функции на браузъра.

Полученият IDL текст, използващ MIDL преводач от SDK на платформата (може да се намери и в каталога Кошче Delphi среда) ние се превръщаме в библиотека от тип TLB, която е много лесна за импортиране с помощта на командите "Компонент" | „Импортиране на компонент ...“

За да не губите време, използвайте готови файлове от архива за статията.

За да завършим създаването на необходимата инфраструктура, наследяваме нов компонент от TWebBrowser по следния начин: