Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать WebBrowser средствами Delphi? 
:(
    Опции темы
Poseidon
Дата 18.5.2005, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 4
Всего: 133



Читая и перечитывая вопросы и ответы на Круглом столе сайта Королевство Дельфи я все время натыкался на вопросы о компоненте 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 - происходит, когда открывается новое окно браузера. 

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


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.