Как да направите уеб браузър с помощта на 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 -възниква, когато се отвори нов прозорец на браузъра.