U većini slučajeva koristite TWebBrowser za prikaz HTML dokumenata korisniku, stvarajući tako svoju verziju (Internet Explorer) web preglednika. Imajte na umu da TWebBrowser može, na primjer, prikazati i Wordove dokumente.
Vrlo lijepa značajka preglednika je prikazivanje informacija o vezama, na primjer, u statusnoj traci, kada miš pređe preko veze u dokumentu.
TWebBrowser ne izlaže događaj poput "OnMouseMove". Čak i ako takav događaj postoji, pokrenuo bi se za komponentu TWebBrowser - NE za dokument koji se prikazuje unutar TWebBrowser.
Kako biste pružili takve informacije (i puno više, kao što ćete vidjeti za trenutak) u svojoj aplikaciji Delphi koristeći komponentu TWebBrowser, tehniku nazvanu "događaji potonuli"mora se implementirati.
Za kretanje do web stranice pomoću komponente TWebBrowser koju zovete Kretanje metoda. Dokument svojstvo TWebBrowser vraća an IHTMLDocument2 vrijednost (za web dokumente). Ovo sučelje koristi se za dohvaćanje podataka o dokumentu, za ispitivanje i izmjenu HTML elemenata i teksta unutar dokumenta te za obradu povezanih događaja.
Da biste dobili atribut "href" ("link") oznake "a" unutar dokumenta, dok miš prelazi preko dokumenta, morate reagirati na događaj "onmousemove" IHTMLDocument2.
Budući da nas zanima atribut HREF elementa A - da bismo pokazali URL veze preko koje je miš završen, potopit ćemo događaj "onmousemove".
Kao što je gore objašnjeno, pridajemo događaju pokreta na dokumentu u slučaju OnDocumentComplete TWebBrowser:
jedinica Cjelina 1;
sučelje
namjene
Windows, Poruke, SysUtils, Varijante, Klase, Grafika, Kontrole, Obrasci,
Dijalozi, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
tip
TObjectProcedure = postupakodobjekt;
TEventObject = klasa(TInterfacedObject, IDispatch)
privatna
FOnEvent: TObjectProcedure;
zaštićen
funkcija GetTypeInfoCount (odbrojavanje: Cijeli broj): HResult; stdcall;
funkcija GetTypeInfo (Index, LocaleID: Integer; iz TypeInfo): HResult; stdcall;
funkcija GetIDsOfNames (const IID: TGUID; Imena: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
funkcija Invoke (DispID: Integer; const IID: TGUID; LocaleID: Integer; Zastave: Riječ; var parametri; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
javnost
konstruktor Stvoriti(const OnEvent: TObjectProcedure);
svojstvo OnEvent: TObjectProcedure read FOnEvent write FOnEvent;
kraj;
TForm1 = klasa(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
postupak WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, zastave, TargetFrameName, PostData, zaglavlja: OleVariant; var Otkaži: WordBool);
postupak WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
postupak FormCreate (pošiljalac: TObject);
privatna
postupak Document_OnMouseOver;
javnost
{ Javnost deklaracije}
kraj;
var
Oblik1: TForm1;
htmlDoc: IHTMLDocument2;
izvršenje
{$ R * .dfm}
postupak TForm1.Document_OnMouseOver;
var
element: IHTMLElement;
početi
ako htmlDoc = nulazatim Izlaz;
element: = htmlDoc.parentWindow.event.srcElement;
elementInfo. Čisto;
ako LowerCase (element.tagName) = 'a' zatim
početi
elementInfo. Linije. Dodaj ("LINK informacije ...");
elementInfo. Linije. Dodaj (Format ('HREF:% s', [element.getAttribute ('href', 0)]));
kraj
drugoako LowerCase (element.tagName) = 'img' zatim
početi
elementInfo. Linije. Dodaj ('Podaci o IMAGE ...');
elementInfo. Linije. Dodaj (Format ('SRC:% s', [element.getAttribute ('src', 0)]));
kraj
drugo
početi
elementInfo. Linije. Dodaj (Format ('TAG:% s', [element.tagName]));
kraj;
kraj; (* Document_OnMouseOver *)
postupak TForm1.FormCreate (pošiljalac: TObject);
početi
WebBrowser1.Navigate (” http://delphi.about.com') ;
elementInfo. Čisto;
elementInfo. Linije. Add ("Pomicanje miša preko dokumenta ...");
kraj; (* FormCreate *)
postupak TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, zastave, TargetFrameName, PostData, zaglavlja: OleVariant; var Otkaži: WordBool);
početi
htmlDoc: = nula;
kraj; (* WebBrowser1BeforeNavigate2 *)
postupak TForm1.WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
početi
ako Dodijeljeno (WebBrowser1.Document) zatim
početi
htmlDoc: = WebBrowser1.Document kao IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. Stvori (Document_OnMouseOver) kao IDisatch);
kraj;
kraj; (* WebBrowser1DocumentComplete *)
{TEventObject}
konstruktor TEventObject. Stvoriti(const OnEvent: TObjectProcedure);
početi
naslijedio Stvoriti;
FOnEvent: = OnEvent;
kraj;
funkcija TEventObject. GetIDsOfNames (const IID: TGUID; Imena: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
početi
Rezultat: = E_NOTIMPL;
kraj;
funkcija TEventObject. GetTypeInfo (Index, LocaleID: Integer; iz TypeInfo): HResult;
početi
Rezultat: = E_NOTIMPL;
kraj;
funkcija TEventObject. GetTypeInfoCount (odbrojavanje: Cijeli broj): HResult;
početi
Rezultat: = E_NOTIMPL;
kraj;
funkcija TEventObject. Invoke (DispID: Integer; const IID: TGUID; LocaleID: Integer; Zastave: Riječ; var parametri; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
početi
ako (DispID = DISPID_VALUE) zatim
početi
ako Dodijeljeno (FOnEvent) zatim FOnEvent;
Rezultat: = S_OK;
kraj
drugo Rezultat: = E_NOTIMPL;
kraj;
kraj.