Pridobite URL hiperpovezave v dokumentu TWebBrowser

click fraud protection

V večini primerov uporabite TWebBrowser za prikaz dokumentov HTML uporabniku - s tem ustvarite svojo različico spletnega brskalnika (Internet Explorer). Upoštevajte, da lahko TWebBrowser na primer prikaže tudi Wordove dokumente.

Zelo lepa lastnost brskalnika je prikazovanje informacij o povezavah, na primer v vrstici stanja, ko miška premakne miško nad povezavo v dokumentu.

TWebBrowser ne izpostavlja dogodka, kot je "OnMouseMove". Tudi če bi tak dogodek obstajal, bi bil sprožen za komponento TWebBrowser - NE za dokument, ki je prikazan znotraj TWebBrowserja.

Da bi zagotovili takšne informacije (in še veliko več, kot boste videli v trenutku) v svoji aplikaciji Delphi z uporabo komponente TWebBrowser, tehnike imenovane "dogodki potonejo"mora biti izveden.

Za pomikanje do spletne strani s pomočjo komponente TWebBrowser, ki jo pokličete Navigacija metoda. The Dokument lastnost TWebBrowser vrne IHTMLDocument2 vrednost (za spletne dokumente). Ta vmesnik se uporablja za pridobivanje informacij o dokumentu, za preučevanje in spreminjanje elementov HTML in besedila znotraj dokumenta ter za obdelavo povezanih dogodkov.

instagram viewer

Če želite pridobiti atribut "href" oznake "a" znotraj dokumenta, medtem ko miška lebdi nad dokumentom, morate reagirati na dogodek "onmousemove" IHTMLDocument2.

Ker nas zanima atribut HREF elementa A - da bi pokazali URL povezave, s katero je miš končan, bomo potopili dogodek "onmousemove".

Kot je razloženo zgoraj, pripenjamo na dogodek onmousemove dokumenta v dogodku TDacumentComplete TWebBrowser:

enota Enota1;
vmesnik
uporablja
Windows, Sporočila, SysUtils, Različice, Razredi, Grafika, Kontrole, Obrazci,
Dialogs, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
tip
TObjectProcedure = postopekodobjekt;
TEventObject = razred(TInterfacedObject, IDispatch)
zasebno
FOnEvent: TObjectProcedure;
zaščitena
funkcijo GetTypeInfoCount (od štetja: Integer): HResult; stdcall;
funkcijo GetTypeInfo (Kazalo, LocaleID: Integer; ven TypeInfo): HResult; stdcall;
funkcijo GetIDsOfNames (konst IID: TGUID; Imena: kazalec; NameCount, LocaleID: Integer; DispIDs: kazalec): HResult; stdcall;
funkcijo Pokliči (DispID: Integer; konst IID: TGUID; LocaleID: Integer; Zastave: Beseda; var Parame; VarResult, ExcepInfo, ArgErr: kazalec): HResult; stdcall;
javnosti
konstruktor Ustvari (konst OnEvent: TObjectProcedure);
premoženje OnEvent: TObjectProcedure preberi FOnEvent napiši FOnEvent;
konec;
TForm1 = razred(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
postopek WebBrowser1BeforeNavigate2 (ASender: TObject; konst pDisp: IDispatch; var URL, Zastavice, TargetFrameName, PostData, glave: OleVariant; var Prekliči: WordBool);
postopek WebBrowser1DocumentComplete (ASender: TObject; konst pDisp: IDispatch; var URL: OleVariant);
postopek FormCreate (pošiljatelj: TObject);
zasebno
postopek Document_OnMouseOver;
javnosti
{ Javno izjave}
konec;
var
Obrazec1: TForm1;
htmlDoc: IHTMLDocument2;
izvajanje
{$ R * .dfm}
postopek TForm1.Document_OnMouseOver;
var
element: IHTMLElement;
začeti
če htmlDoc = ničtorej Izhod;
element: = htmlDoc.parentWindow.event.srcElement;
elementInfo. Jasno;
če LowerCase (element.tagName) = 'a' torej
začeti
elementInfo. Vrstice. Dodaj ("LINK informacije ...");
elementInfo. Vrstice. Dodaj (Oblika ('HREF:% s', [element.getAttribute ('href', 0)]));
konec
drugačeče LowerCase (element.tagName) = 'img' torej
začeti
elementInfo. Vrstice. Dodaj ('Informacije o IMAGE ...');
elementInfo. Vrstice. Dodaj (Oblika ('SRC:% s', [element.getAttribute ('src', 0)]));
konec
drugače
začeti
elementInfo. Vrstice. Dodaj (Oblika ('TAG:% s', [element.tagName]));
konec;
konec; (* Dokument_OnMouseOver *)
postopek TForm1.FormCreate (Pošiljatelj: TObject);
začeti
WebBrowser1.Navigate (' http://delphi.about.com') ;
elementInfo. Jasno;
elementInfo. Vrstice. Dodaj ("Premaknite miško nad dokumentom ...");
konec; (* FormCreate *)
postopek TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; konst pDisp: IDispatch; var URL, Zastavice, TargetFrameName, PostData, glave: OleVariant; var Prekliči: WordBool);
začeti
htmlDoc: = nič;
konec; (* WebBrowser1BeforeNavigate2 *)
postopek TForm1.WebBrowser1DocumentComplete (ASender: TObject; konst pDisp: IDispatch; var URL: OleVariant);
začeti
če Dodeljeno (WebBrowser1.Document) torej
začeti
htmlDoc: = WebBrowser1.Document kot IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. Ustvari (Document_OnMouseOver) kot ID pošiljke);
konec;
konec; (* WebBrowser1DocumentComplete *)
{TEventObject}
konstruktor TEventObject. Ustvari (konst OnEvent: TObjectProcedure);
začeti
podedovano Ustvari;
FOnEvent: = OnEvent;
konec;
funkcijo TEventObject. GetIDsOfNames (konst IID: TGUID; Imena: kazalec; NameCount, LocaleID: Integer; DispIDs: kazalec): HResult;
začeti
Rezultat: = E_NOTIMPL;
konec;
funkcijo TEventObject. GetTypeInfo (Kazalo, LocaleID: Integer; ven TypeInfo): HResult;
začeti
Rezultat: = E_NOTIMPL;
konec;
funkcijo TEventObject. GetTypeInfoCount (od štetja: Integer): HResult;
začeti
Rezultat: = E_NOTIMPL;
konec;
funkcijo TEventObject. Pokliči (DispID: Integer; konst IID: TGUID; LocaleID: Integer; Zastave: Beseda; var Parame; VarResult, ExcepInfo, ArgErr: kazalec): HResult;
začeti
če (DispID = DISPID_VALUE) torej
začeti
če Dodeljeno (FOnEvent) torej FOnEvent;
Rezultat: = S_OK;
konec
drugače Rezultat: = E_NOTIMPL;
konec;
konec.

instagram story viewer