Як зробити WebBrowser засобами Delphi 5, Delphi, Програмування, статті

Лозовюк Олександр (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;
/ / Права кнопка мишки?
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 – відбувається, коли відкривається нове вікно браузера.

 


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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*