Как да направите уеб браузър с помощта на Delphi 5
Четейки и препрочитайки въпросите и отговорите на кръглата маса на Кралството на Delphi, непрекъснато попадах на въпроси относно компонентаTWebBrowser. Отначало си мислех, че всичко е просто, но когато самият аз трябваше да напиша приложение сTwebBrowser... се оказа, че не е толкова просто!
КомпонентътTWebBrowserвDelphi 4трябваше да бъде специално инсталиран като компонентActive X. В 5-та версия ни срещнаха наполовина и тя е достъпна веднага в разделаИнтернет. Няма да се спирам на характеристиките на програмния интерфейс - той е много прост (надявам се не много) и няма да създаде затруднения.
Нека разгледаме някои свойства и функции наTwebBrowser.
- процедура GoBack;
- процедура GoForward;
- процедура GoHome;
- процедура GoSearch;
- процедура Refresh;
- процедура Stop;
- процедура Изход;
Последната команда е най-интересна -Помощказва, че не трябва да я използвате. Излиза отIEи изчиства прозореца. Но проверих - като вреда от употребата му не се наблюдава.
Следва цяла група от процедури:
procedure Navigate(const URL: WideString); претоварване; procedure Navigate(const URL: WideString; var Flags: OleVariant); претоварване; procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant); претоварване;
procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant); претоварване;
procedure Navigate(const URL: WideString; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant; var Headers: OleVariant); претоварване;
Всички те имат за цел да посочат кое и как трябва да бъде страницатапоказани в браузъра. В най-простия случай можете да използвате първата процедура
procedure Navigate(const URL: WideString);
Следните константи са дефинирани за стойността на флага:
navOpenInNewWindow1ОтваряURLв нов прозорец на браузъра
navNoReadFromCache4Не използва кешираната страница, но зарежда от сървъра.
navNoWriteToCache8Не записва страницата в кеша на диска.
navAllowAutosearch 16Ако браузърът не може да намери посочения домейн, той го предава на търсачката.
Всичко, това може да се зададе и ръчно в настройките на браузъра.
TargetFrameNameуказва името на рамката, където трябва да се зареди страницата. Ако присвоитеNULLстраницата просто ще се зареди в текущия прозорец.
PostData- показва данните, които да бъдат изпратени чрез методаHTTP POST. Ако е зададено наNULL, процедуратаNavigateще използва методаHTTP GET.
Следната доста интересна и полезна процедура
процедура ExecWB(cmdID: OLECMDID; cmdexecopt: OLECMDEXECOPT); претоварване;
Позволява ви да контролирате браузъра и да извиквате различни допълнителни функции - печат, запис и др. Използва интерфейсаIoleCommandTargetза управление на браузъра.
CmdID -указва командата, която да бъде изпълнена. Може да приема следните стойности:
- OLECMDID_OPEN,
- OLECMDID_НОВО,
- 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и т.н. Но повечето от тях са много необходими.
Cmdexecopet- допълнително указва как трябва да се изпълни командата. Може да приема стойности:
OLECMDEXECOPT_DODEFAULT 0Командата се изпълнява по подразбиране.
OLECMDEXECOPT_PROMPTUSER 1Показва диалогов прозорец или допълнителни настройки преди изпълнение.
OLECMDEXECOPT_DONTPROMPTUSER 2Няма зададени въпроси.
OLECMDEXECOPT_SHOWHELP 3Показва се помощ за исканото действие, но самата команда не се изпълнява. Полезно за извикване на помощ заIEот вашето приложение.
Желателно е и дори необходимо тази команда да се извиква в блок
Тази команда извиква диалоговия прозорец за печат на документа. Ако пропуснетеtry…except, когато щракнете върху „Отказ“ в този прозорец, ще се генерира известие за грешка от типа:
повдигна клас изключение EOleException със съобщение „Не може да се зададе свойствоcoISpan. Невалидна стойност на свойството. Трябва да въведете стойност от 1 до 1000".
Сега нека поговорим за свойствата.
Изскачащо меню; Като контрола на прозорец,TwebBrowserподдържа изскачащи менюта. НО! Вашето меню ще се показва само докато страницата не се зареди в браузъра. По-нататък - само менюIE.
Конференцията предложи такъв вариант, който да забрани появата на стандартно меню
свойство OffLine : WordBool;Позволява зареждане на документи от локалния кеш - ако е зададено наTrue.
свойство LocationURL: WideString;Маркирано като само за четене и съдържаURLна ресурса, зареден в браузъра.
Сред най-важните/необходимите са:
- OnDownloadBegin
- OnDownloadComplete
- OnBeforeNavigate2
- На Нов Прозорец2
- OnNavigateComplete2
- OnDocumentComplete
OnDownloadBegin -възниква, когато въведетеURL,и искате да отидете до него. Тук можете да зададете, например, анимация или ProgressBar, за да посочите процеса на зареждане на страницата (заедно сOnProgressChange).
OnDownloadComplete, OnDownloadComplete, OnNavigateComplete2 -се случва, когато страницата приключи със зареждането.
OnBeforeNavigate2 -възниква, когато щракнете върху хипервръзка от главната страница, заредена в браузъра. Тук можете да напишете код, който например анализира къде отива потребителят и съответно да направи нещо. Или забранете отварянето на нови прозорци или отворете свои собствени прозорци (като например да направитеTtabbedNotebookcIEна всяка страница)
OnNewWindow2 -възниква, когато се отвори нов прозорец на браузъра.