Ошибка: Failed to parse the Currency Converter XML document.
$1 569.43


Ошибка: Failed to parse the Currency Converter XML document.
$23 729.05


Ошибка: Failed to parse the Currency Converter XML document.
$1 622.11


Создание Web-броузера на Delphi

Читая и перечитывая вопросы и ответы я все время натыкался на вопросы о компоненте T WebBrowser . Сначала я думал, что все просто, но когда самому понадобилось написать приложение с использованием 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; //правая кнопка мышки ? if Msg.LParamHi = 516 then Msg.Result:= MA_NOACTIVATEANDEAT; // Тут можно вставить код для показания своего меню 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 - происходит, когда открывается новое окно браузера .

Я, конечно, много чего упустил — например, работу с интерфейсами, доступ к тегам страницы — но надеюсь, эта статья и пример помогут вам сделать работоспособный браузер для дальнейших эксперементов. Успехов

 

Интересное

Дата по русски
Скрипт, который мы сейчас рассмотрим, позволяет вывести на экранпосетителя дату в формате русского языка. Сразу предупреждаю,что реализация алгоритма этой задачи не самая лучшая.Но –...
Подробнее...
Войны браузеров
Браузер – это, пожалуй, наиболее часто используемая программа на домашнем ПК – не считая, разумеется, операционной системы. Неудивительно поэтому, что рынок браузеров весьма динамичен. Сегодня из...
Подробнее...
Удаление неиспользуемых...
Известно ли вам, что до тех пор, пока не удалить драйвер в Windows XP, он будет впустую расходовать системные ресурсы? Ниже дана пошаговая инструкция, которая поможет увидеть и удалить ненужные...
Подробнее...
Почему не нужно чистить реестр
Давным-давно, в незапамятные времена (еще до изобретения операционной системы Microsoft Windows 95), компьютеры Windows и программы, разработанные для них, включали в свой состав файлы...
Подробнее...
интим знакомства в москве.
Чистка Windows
Причин подобного поведения «форточек» можно привести массу — от всевозможного программного мусора, забивающегося в укромные уголки Windows и сжирающего немало ресурсов компьютера, до инфицирования...
Подробнее...
Dr.Web защищает от опасных...
Как известно, уже в течение длительного периода происходит спам-рассылка известного «штормового червя», маскирующегося под поздравительную открытку и детектируемого антивирусом Dr.Web как...
Подробнее...
Поэтапная оптимизация сайта
Термин «оптимизация сайтов» в последнее время на слуху у многих компаний, предоставляющих те или иные услуги в глобальной сети. Но это и не удивительно, учитывая огромную выгоду, которую можно...
Подробнее...
Четыре правила...
Правило первое Научить дизайну, вот так, путем написания нескольких заметок, нельзя. Если по HTML-верстке или азам проектирования веб-сайта еще можно написать пошаговую инструкцию, то с дизайном...
Подробнее...
Корпоративный интернет-счётчик
В данной статье рассказывается как создать интернет-счётчик для корпоративного порталаСчётчик должен вести подробную информацию о посетителях: адрес откуда пришёл посетитель, адрес страницы,...
Подробнее...
Кто и как выманивает...
Пару лет назад стандартный набор распространенных интернет-угроз пополнился еще одним видом криминала. В прессе все чаще стало мелькать слово «фишинг» (phishing), под которым поначалу...
Подробнее...