Дополнительная информация по функциям компонента Delphi TWebBrowser
Читая и перечитывая вопросы и ответы на
Круглом столе сайта Королевство Дельфи я все время
натыкался на вопросы о компоненте TWebBrowser. Сначала я думал, что все просто, но когда самому понадобилось написать приложение с использованием TwebBrowser… оказалось, что не все так просто!
Эта статья не претендует на исчерпывающие руководство
по написанию браузера в Delphi 5 - скорее всего она
будет со временем дополняться и исправляться. Я постарался обобщить в одном
работающем примере решения большинства вопросов, заданных на этом сайте
(признаюсь, там были и мои). Также выражаю большую признательность Елене Филлиповой за исчерпывающие ответы на некоторые из них, и
всему Королевству за столь хороший и полезный сайт.
Компонент TWebBrowser в Delphi 3,4
нужно было специально инсталлировать как Active X компонент. В 5-7й версии нам пошли навстречу, и он сразу есть на
вкладке Internet.
Не буду останавливаться на особенностях интерфейса программы - он очень прост
(надеюсь, не очень) и не вызовет трудностей.
Рассмотрим некоторые свойства и функции TwebBrowser.
procedure GoBack;
procedure GoForward;
procedure GoHome;
procedure GoSearch;
procedure Refresh;
procedure Stop;
procedure Quit;
Названия этих процедур говорят сами за себя, а позволяют они осуществить
управление просмотром - перейти по истории просмотра вперед, назад, перейти на
страницу, установленную как домашняя, открыть страницу
поиска, обновить текущую страницу, остановить загрузку страницы, выйти.
Последняя команда самая интересная - в Help написано,
что использовать ее не надо. Она завершает работу IE и очищает окно. Но я
проверял - вроде вреда от ее использования не наблюдалось.
Далее идет целая группа процедур:
procedure Navigate(const URL: WideString); overload;
procedure Navigate(const URL: WideString; var Flags: OleVariant); overload;
procedure Navigate(const URL: WideString; var Flags: OleVariant; var
TargetFrameName: OleVariant);
overload;
procedure Navigate(const URL: WideString; var Flags: OleVariant;
var TargetFrameName: OleVariant; var PostData: OleVariant); overload;
procedure Navigate(const URL: WideString; var Flags: OleVariant;
var TargetFrameName: OleVariant; var PostData: OleVariant;
var Headers: OleVariant);
overload;
Все они предназначены для указания того, какая и как
страница должна отображаться в браузере. В простейшем случае можно использовать первую процедуру
procedure Navigate(const URL: WideString);
Например так:
WebBrowser1.Navigate(' http://www.kolpinkurs.ru/');
Или
WebBrowser1.Navigate(' http://www.kolpinkurs.ru/',empty,empty,empty,empty)
Для значения Flag определены такие константы:
navOpenInNewWindow 1 Открывает URL в новом окне браузера
navNoHistory 2 Не заносит адрес в
список History.
navNoReadFromCache 4 Не
использует сохраненную в кеше страницу, а загружает с
сервера.
navNoWriteToCache 8 Не записывает страницу в дисковый кеш.
navAllowAutosearch 16 Если броузер
не может найти указанный домен, он передает его в поисковый механизм.
Все, это можно также вручную установить в настройках браузера.
TargetFrameName
указывает имя фрейма, куда надо загрузить страницу. Если присвоить
NULL страница просто загрузиться в текущее окно.
PostData -
указывает на данные, которые нужно отослать, используя метод HTTP POST. Если
установить в NULL, процедура Navigate будет
использовать метод HTTP GET.
Следующая довольно интересная и полезная процедура
procedure ExecWB(cmdID:
OLECMDID; cmdexecopt: OLECMDEXECOPT);
overload;
Позволяет осуществить управление браузером и вызывать различные дополнительные
функции - печать, сохранение и др. Использует IoleCommandTarget
интерфейс для управления браузером.
CmdID - задает команду, которую нужно
выполнить. Может принимать следующие значения:
OLECMDID_OPEN,
OLECMDID_NEW,
OLECMDID_SAVE,
OLECMDID_SAVEAS,
OLECMDID_SAVECOPYAS,
OLECMDID_PRINT,
OLECMDID_PRINTPREVIEW,
OLECMDID_PAGESETUP,
OLECMDID_SPELL,
OLECMDID_PROPERTIES,
OLECMDID_CUT,
OLECMDID_COPY,
OLECMDID_PASTE,
OLECMDID_PASTESPECIAL,
OLECMDID_UNDO,
OLECMDID_REDO,
OLECMDID_SELECTALL,
OLECMDID_CLEARSELECTION,
OLECMDID_ZOOM,
OLECMDID_GETZOOMRANGE,
OLECMDID_UPDATECOMMANDS,
OLECMDID_REFRESH,
OLECMDID_STOP,
OLECMDID_HIDETOOLBARS,
OLECMDID_SETPROGRESSMAX ,
OLECMDID_SETPROGRESSPOS,
OLECMDID_SETPROGRESSTEXT,
OLECMDID_SETTITLE,
OLECMDID_SETDOWNLOADSTATE,
OLECMDID_STOPDOWNLOAD,
OLECMDID_FIND,
OLECMDID_ONTOOLBARACTIVATED,
OLECMDID_DELETE,
OLECMDID_HTTPEQUIV,
OLECMDID_ENABLE_INTERACTION,
OLECMDID_HTTPEQUIV_DONE,
OLECMDID_ONUNLOAD,
OLECMDID_PROPERTYBAG2,
OLECMDID_PREREFRESH
Если присмотреться, то можно увидеть, что некоторые из них дублируются
процедурами Stop, Refresh и
др. Но большинство очень даже нужные.
Cmdexecopt
- указывает дополнительно, как команда должна исполняться. Может принимать
значения:
OLECMDEXECOPT_DODEFAULT 0 Команда исполняется так, как принято по умолчанию.
OLECMDEXECOPT_PROMPTUSER 1 Перед выполнением
выводиться окно диалога или дополнительных настроек.
OLECMDEXECOPT_DONTPROMPTUSER 2 Не задается никаких
вопросов.
OLECMDEXECOPT_SHOWHELP 3 Выводиться справка по
запрошенному действии, но сама команда не выполняется. Удобно для вызова из
вашего приложения справки по IE.
Вызвать эту команду желательно и даже нужно в блоке
|
Эта команда вызивает диалоговое окно печати
документа. Если же опустить try…except, то при нажатии "Отмена" в этом окне
будет сгенерировано уведомление об ошибке типа:
raised exception class EOleException with message "Невозможно
установить свойство coISpan. Недопустимое
значения свойства. Требуется ввести значение от 1 до 1000".
Теперь поговорим о свойствах.
PopupMenu;
Как оконный элемент управления, TwebBrowser поддерживает всплывающие меню. НО! Ваше меню
будет появляться только пока в браузер не загружена
страница. Дальше - только меню IE.
В Конференции предложили такой вариант для запрета появления стандартного меню
|
property OffLine : WordBool; Позволяет
загружать документы из локального кеша
- если присвоить True.
property LocationURL: WideString; Позначено как
"только для чтения" и содержит URL ресурса, загруженого
в браузер.
Теперь события.
Среди самых важных/нужных есть:
OnDownloadBegin
OnDownloadComplete
OnBeforeNavigate2
OnNewWindow2
OnNavigateComplete2
OnDocumentComplete
OnDownloadBegin - происходит, когда вы, наберя URL, хотите перейти по нему. Тут можно задать
например анимацию или ProgressBar
для индикации процесса загрузки страницы ( совмесно с OnProgressChange).
OnDownloadComplete, OnDownloadComplete,
OnNavigateComplete2 - происходит, когда страница закончила грузиться.
Правда, здесь есть много нюансов при загрузке страниц с графикой и фреймами -
для каждого загружаемого элемента будут генерироваться новые события
начала/окончания загрузки, а кроме того, если
отключить загрузку рисунков/анимации/видео, так вообще некоторые из них не
будут происходить! Так что пользоваться ими нужно осторожно.
OnBeforeNavigate2 - происходит когда вы переходите по щелчку на гиперссылке из
основной страницы, загруженной в браузер. Сюда можно писать код, который
например, анализирует - куда пользователь переходит, и соответственно, что-то
делать. Или запретить открывание новых окно, или
открывать свои окна (типа сделать TtabbedNotebook c IE на каждой странице)
OnNewWindow2 - происходит, когда открывается новое окно браузера.
Я, конечно, много чего упустил - например, работу с интерфейсами, доступ к
тегам страницы - но надеюсь, эта статья и пример помогут вам сделать
работоспособный браузер для дальнейших экспериментов. Успехов!
Использованы материалы сайта : http://delphiworld.narod.ru