În majoritatea situațiilor, utilizați TWebBrowser pentru a afișa documente HTML utilizatorului, creând astfel propria versiune a browserului Web (Internet Explorer). Rețineți că TWebBrowser poate afișa și documente Word, de exemplu.
O caracteristică foarte drăguță a unui browser este de a afișa informații despre link, de exemplu, în bara de stare, când mouse-ul trece peste un link dintr-un document.
TWebBrowser nu expune un eveniment de genul „OnMouseMove”. Chiar dacă un astfel de eveniment ar exista, acesta va fi tras pentru componenta TWebBrowser - NU pentru documentul afișat în TWebBrowser.
Pentru a oferi astfel de informații (și multe altele, după cum veți vedea într-un moment) în aplicația dvs. Delphi folosind componenta TWebBrowser, o tehnică numită "evenimentele se scufundă"trebuie implementat.
Pentru a naviga către o pagină web folosind componenta TWebBrowser la care suni Navigați metodă. Document proprietatea TWebBrowser returnează an IHTMLDocument2 valoare (pentru documente web). Această interfață este utilizată pentru a prelua informații despre un document, pentru a examina și modifica elementele și textul HTML din document și pentru a procesa evenimente conexe.
Pentru a obține atributul (link) al unei etichete „a” din interiorul unui document, în timp ce mouse-ul trece peste un document, trebuie să reacționați la evenimentul „onmousemove” al IHTMLDocument2.
Întrucât ne interesează atributul HREF al unui element A - pentru a arăta adresa URL a unei legături, mouse-ul este terminat, vom scufunda evenimentul „onmousemove”.
După cum am explicat mai sus, ne atașăm la evenimentul onmousemove al unui document din evenimentul OnDocumentComplete al unui TWebBrowser:
unitate Unitatea 1;
interfață
utilizări
Windows, mesaje, SysUtils, variante, clase, grafică, controale, formulare,
Dialoguri, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
tip
TObjectProcedure = procedurădeobiect;
TEventObject = clasă(TInterfacedObject, IDispatch)
privat
FOnEvent: TObjectProcedure;
protejat
funcţie GetTypeInfoCount (contorizare: Integer): HResult; stdcall;
funcţie GetTypeInfo (Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
funcţie GetIDsOfNames (const IID: TGUID; Nume: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
funcţie Invoca (DispID: Integer; const IID: TGUID; LocaleID: Integer; Steaguri: Cuvânt; var params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
public
constructor Crea(const OnEvent: TObjectProcedure);
proprietate OnEvent: TObjectProcedure citeste FOnEvent scrie FOnEvent;
Sfârșit;
TForm1 = clasă(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
procedură WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, Steaguri, TargetFrameName, PostData, Anteturi: OleVariant; var Anulați: WordBool);
procedură WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
procedură FormCreate (Expeditor: TObject);
privat
procedură Document_OnMouseOver;
public
{ Public declarații}
Sfârșit;
var
Form1: TForm1;
htmlDoc: IHTMLDocument2;
punerea în aplicare
{$ R * .dfm}
procedură TForm1.Document_OnMouseOver;
var
element: IHTMLElement;
începe
dacă htmlDoc = zeroapoi Ieșire;
element: = htmlDoc.parentWindow.event.srcElement;
elementInfo. Clar;
dacă LowerCase (element.tagName) = 'a' apoi
începe
elementInfo. Linii. Adăugați („INFORMAȚII LINK ...”);
elementInfo. Linii. Add (Format ('HREF:% s', [element.getAttribute ('href', 0)]));
Sfârșit
altfeldacă LowerCase (element.tagName) = 'img' apoi
începe
elementInfo. Linii. Adăugați („INFORMAȚII IMAGINE ...”);
elementInfo. Linii. Add (Format ('SRC:% s', [element.getAttribute ('src', 0)]));
Sfârșit
altfel
începe
elementInfo. Linii. Add (Format ('TAG:% s', [element.tagName]));
Sfârșit;
Sfârșit; (* Document_OnMouseOver *)
procedură TForm1.FormCreate (Expeditor: TObject);
începe
WebBrowser1.Navigate (“ http://delphi.about.com') ;
elementInfo. Clar;
elementInfo. Linii. Adăugați ('Mutați mouse-ul peste document ...');
Sfârșit; (* FormCreate *)
procedură TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, Steaguri, TargetFrameName, PostData, Anteturi: OleVariant; var Anulați: WordBool);
începe
htmlDoc: = zero;
Sfârșit; (* WebBrowser1BeforeNavigate2 *)
procedură TForm1.WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
începe
dacă Atribuit (WebBrowser1.Document) apoi
începe
htmlDoc: = WebBrowser1.Document la fel de IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. Creați (Document_OnMouseOver) la fel de IDispatch);
Sfârșit;
Sfârșit; (* WebBrowser1DocumentComplete *)
{TEventObject}
constructor TEventObject. Crea(const OnEvent: TObjectProcedure);
începe
mostenit Crea;
FOnEvent: = OnEvent;
Sfârșit;
funcţie TEventObject. GetIDsOfNames (const IID: TGUID; Nume: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
începe
Rezultat: = E_NOTIMPL;
Sfârșit;
funcţie TEventObject. GetTypeInfo (Index, LocaleID: Integer; out TypeInfo): HResult;
începe
Rezultat: = E_NOTIMPL;
Sfârșit;
funcţie TEventObject. GetTypeInfoCount (contorizare: Integer): HResult;
începe
Rezultat: = E_NOTIMPL;
Sfârșit;
funcţie TEventObject. Invoca (DispID: Integer; const IID: TGUID; LocaleID: Integer; Steaguri: Cuvânt; var params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
începe
dacă (DispID = DISPID_VALUE) apoi
începe
dacă Atribuit (FOnEvent) apoi FOnEvent;
Rezultat: = S_OK;
Sfârșit
altfel Rezultat: = E_NOTIMPL;
Sfârșit;
Sfârșit.