Ve většině situací používáte TWebBrowser k zobrazení dokumentů HTML uživateli, čímž vytvoříte vlastní verzi webového prohlížeče (Internet Explorer). Všimněte si, že TWebBrowser může také zobrazovat například dokumenty Word.
Velmi pěknou funkcí prohlížeče je zobrazení informací o odkazu, například ve stavovém řádku, když se myš pohybuje nad odkazem v dokumentu.
TWebBrowser nevystavuje událost jako „OnMouseMove“. I kdyby taková událost existovala, byla by spuštěna pro komponentu TWebBrowser - NE pro dokument zobrazený uvnitř TWebBrowser.
Za účelem poskytnutí těchto informací (a mnohem více, jak uvidíte za chvíli) ve vaší aplikaci Delphi pomocí komponenty TWebBrowser, technika zvaná „události klesající"musí být provedeno.
Chcete-li přejít na webovou stránku pomocí komponenty TWebBrowser, voláte Navigovat metoda. Dokument vlastnost TWebBrowser vrátí IHTMLDocument2 hodnota (pro webové dokumenty). Toto rozhraní se používá k načtení informací o dokumentu, ke kontrole a úpravě prvků HTML a textu v dokumentu a ke zpracování souvisejících událostí.
Chcete-li získat atribut „href“ (link) značky „a“ uvnitř dokumentu, zatímco se myš pohybuje nad dokumentem, musíte reagovat na událost „onmousemove“ IHTMLDocument2.
Protože se zajímáme o atribut HREF prvku A - abychom ukázali URL odkazu, po kterém myš skončila, ponoříme událost „onmousemove“.
Jak je vysvětleno výše, připojujeme se k onmousemove události dokumentu v události OnDocumentComplete TWebBrowser:
jednotka Lekce 1;
rozhraní
použití
Windows, Zprávy, SysUtils, Varianty, Třídy, Grafika, Ovládací prvky, Formuláře,
Dialogy, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
typ
TObjectProcedure = postupzobjekt;
TEventObject = třída(TInterfacedObject, IDispatch)
soukromé
FOnEvent: TObjectProcedure;
chráněný
funkce GetTypeInfoCount (počet: Integer): HResult; stdcall;
funkce GetTypeInfo (Index, LocaleID: Integer; mimo TypeInfo): HResult; stdcall;
funkce GetIDsOfNames (konst IID: TGUID; Názvy: Ukazatel; NameCount, LocaleID: Integer; DispID: Ukazatel): HResult; stdcall;
funkce Vyvolat (DispID: Integer; konst IID: TGUID; LocaleID: Celé číslo; Vlajky: Slovo; var Params; VarResult, ExcepInfo, ArgErr: Ukazatel): HResult; stdcall;
veřejnost
konstruktér Vytvořit(konst OnEvent: TObjectProcedure);
vlastnictví OnEvent: TObjectProcedure číst FOnEvent write FOnEvent;
konec;
TForm1 = třída(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
postup WebBrowser1BeforeNavigate2 (ASender: TObject; konst pDisp: IDispatch; var URL, příznaky, TargetFrameName, PostData, záhlaví: OleVariant; var Zrušit: WordBool);
postup WebBrowser1DocumentComplete (ASender: TObject; konst pDisp: IDispatch; var URL: OleVariant);
postup FormCreate (odesílatel: TObject);
soukromé
postup Document_OnMouseOver;
veřejnost
{ Veřejnost prohlášení}
konec;
var
Form1: TForm1;
htmlDoc: IHTMLDocument2;
implementace
{$ R * .dfm}
postup TForm1.Document_OnMouseOver;
var
element: IHTMLElement;
začít
-li htmlDoc = nulapak Výstup;
element: = htmlDoc.parentWindow.event.srcElement;
elementInfo. Průhledná;
-li LowerCase (element.tagName) = 'a' pak
začít
elementInfo. Čáry. Přidat ('LINK info ...');
elementInfo. Čáry. Přidat (Formát ('HREF:% s', [element.getAttribute ('href', 0)]));
konec
jiný-li LowerCase (element.tagName) = 'img' pak
začít
elementInfo. Čáry. Přidat ('IMAGE info ...');
elementInfo. Čáry. Přidat (Formát ('SRC:% s', [element.getAttribute ('src', 0)]));
konec
jiný
začít
elementInfo. Čáry. Přidat (Formát ('TAG:% s', [element.tagName]));
konec;
konec; (* Document_OnMouseOver *)
postup TForm1.FormCreate (Sender: TObject);
začít
WebBrowser1.Navigate (' http://delphi.about.com') ;
elementInfo. Průhledná;
elementInfo. Čáry. Přidat ('Přesuňte myš nad dokument ...');
konec; (* FormCreate *)
postup TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; konst pDisp: IDispatch; var URL, příznaky, TargetFrameName, PostData, záhlaví: OleVariant; var Zrušit: WordBool);
začít
htmlDoc: = nula;
konec; (* WebBrowser1BeforeNavigate2 *)
postup TForm1.WebBrowser1DocumentComplete (ASender: TObject; konst pDisp: IDispatch; var URL: OleVariant);
začít
-li Přiřazeno (WebBrowser1.Document) pak
začít
htmlDoc: = WebBrowser1.Document tak jako IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. Vytvořit (Document_OnMouseOver) tak jako IDispatch);
konec;
konec; (* WebBrowser1DocumentComplete *)
{TEventObject}
konstruktér TEventObject. Vytvořit(konst OnEvent: TObjectProcedure);
začít
zdědil Vytvořit;
FOnEvent: = OnEvent;
konec;
funkce TEventObject. GetIDsOfNames (konst IID: TGUID; Názvy: Ukazatel; NameCount, LocaleID: Integer; DispID: Ukazatel): HResult;
začít
Výsledek: = E_NOTIMPL;
konec;
funkce TEventObject. GetTypeInfo (Index, LocaleID: Integer; mimo TypeInfo): HResult;
začít
Výsledek: = E_NOTIMPL;
konec;
funkce TEventObject. GetTypeInfoCount (počet: Integer): HResult;
začít
Výsledek: = E_NOTIMPL;
konec;
funkce TEventObject. Vyvolat (DispID: Integer; konst IID: TGUID; LocaleID: Celé číslo; Vlajky: Slovo; var Params; VarResult, ExcepInfo, ArgErr: Ukazatel): HResult;
začít
-li (DispID = DISPID_VALUE) pak
začít
-li Přiřazeno (FOnEvent) pak FOnEvent;
Výsledek: = S_OK;
konec
jiný Výsledek: = E_NOTIMPL;
konec;
konec.