Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Как сделать WebBrowser средствами Delphi 5
Автор: Лозовюк Александр
WEB-сайт: http://search3i.al.ru/

Мы с ней попробовали все ласки, все скорости и все позы. ...Потом она ушла в офф-лайн.

Читая и перечитывая вопросы и ответы на Круглом столе сайта Королевство Дельфи я все время натыкался на вопросы о компоненте TWebBrowser. Сначала я думал, что все просто, но когда самому понадобилось написать приложение с использованием TwebBrowser… оказалось, что не все так просто!

Эта статья не претендует на исчерпывающие руководство по написанию браузера в Delphi 5 - скорее всего она будет со временем дополняться и исправляться. Я постарался обобщить в одном работающем примере решения большинства вопросов, заданных на этом сайте (признаюсь, там были и мои). Также выражаю большую признательность Елене Филлиповой за исчерпывающие ответы на некоторые из них, и всему Королевству за столь хороший и полезный сайт.

Компонент TWebBrowser в Delphi 4 нужно было специально инсталлировать как Active X компонент. В 5-й версии нам пошли навстречу, и он сразу есть на вкладке 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://delphi.vitpc.com/');

Или

WebBrowser1.Navigate(' http://delphi.vitpc.com/',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

WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER);

except

end;

Эта команда вызивает диалоговое окно печати документа. Если же опустить try…except, то при нажатии "Отмена" в этом окне будет сгенерировано уведомление об ошибке типа:

raised exception class EOleException with message "Невозможно установить свойство coISpan. Недопустимое значения свойства. Требуется ввести значение от 1 до 1000".

Теперь поговорим о свойствах.

PopupMenu; Как оконный элемент управления, TwebBrowser поддерживает всплывающие меню. НО! Ваше меню будет появляться только пока в браузер не загружена страница. Дальше - только меню IE.

В Конференции предложили такой вариант для запрета появления стандартного меню


...
 private
  { Private declarations }
 procedure WMMouseActivate(var Msg: TMessage); message WM_MOUSEACTIVATE;
 public
  { Public declarations }
 end;
...
...
procedure TForm1.WMMouseActivate(var Msg: TMessage);
begin
  try
    inherited;
    // right mouse button
    if Msg.LParamHi = 516 then
       Msg.Result:= MA_NOACTIVATEANDEAT;
    // insert code here for show own context menu
  except
  end;
end;

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://www.matrix-wb.h1.ru/ - Новое поколение выбирает... MatrixWB.

Скачать проект (откомпилировано в Delphi 5):

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay