Uzyskaj adres URL hiperłącza w dokumencie TWebBrowser

W większości sytuacji używasz TWebBrowser do wyświetlania dokumentów HTML użytkownikowi - w ten sposób tworzysz własną wersję przeglądarki internetowej (Internet Explorer). Pamiętaj, że TWebBrowser może także wyświetlać dokumenty Worda, na przykład.

Bardzo miłą funkcją przeglądarki jest wyświetlanie informacji o łączu, na przykład na pasku stanu, gdy wskaźnik myszy znajduje się nad łączem w dokumencie.

TWebBrowser nie ujawnia zdarzenia takiego jak „OnMouseMove”. Nawet gdyby takie zdarzenie istniało, zostałoby uruchomione dla komponentu TWebBrowser - NIE dla dokumentu wyświetlanego w TWebBrowser.

Aby dostarczyć takie informacje (i wiele więcej, jak zobaczymy za chwilę) w aplikacji Delphi przy użyciu komponentu TWebBrowser, technika o nazwie „tonące wydarzenia„musi być wcielony w życie.

Aby przejść do strony internetowej za pomocą komponentu TWebBrowser, wywołujesz Nawigować metoda. The Dokument właściwość TWebBrowser zwraca an IHTMLDocument2 wartość (dla dokumentów internetowych). Ten interfejs służy do wyszukiwania informacji o dokumencie, badania i modyfikacji elementów HTML i tekstu w dokumencie oraz przetwarzania powiązanych zdarzeń.

instagram viewer

Aby uzyskać atrybut (link) „href” znacznika „a” w dokumencie, podczas gdy mysz przesuwa się nad dokumentem, musisz zareagować na zdarzenie „onmousemove” IHTMLDocument2.

Ponieważ jesteśmy zainteresowani atrybutem HREF elementu A - w celu wyświetlenia adresu URL łącza, na którym znajduje się mysz, zrzucimy zdarzenie „onmousemove”.

Jak wyjaśniono powyżej, dołączamy do zdarzenia onmousemove dokumentu w zdarzeniu OnDocumentComplete TWebBrowser:

jednostka Rozdział 1;
berło
wykorzystuje
Windows, Wiadomości, SysUtils, Warianty, Klasy, Grafika, Formanty, Formularze,
Dialogi, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
rodzaj
TObjectProcedure = procedurazobiekt;
TEventObject = klasa(TInterfacedObject, IDispatch)
prywatny
FOnEvent: TObjectProcedure;
chroniony
funkcjonować GetTypeInfoCount (out Count: Integer): HResult; stdcall;
funkcjonować GetTypeInfo (Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
funkcjonować GetIDsOfNames (const IID: TGUID; Nazwy: Wskaźnik; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
funkcjonować Invoke (DispID: Integer; const IID: TGUID; LocaleID: Integer; Flagi: Słowo; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
publiczny
konstruktor Stwórz(const OnEvent: TObjectProcedure);
własność OnEvent: TObjectProcedure read FOnEvent write FOnEvent;
koniec;
TForm1 = klasa(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
procedura WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, flagi, TargetFrameName, PostData, nagłówki: OleVariant; var Anuluj: WordBool);
procedura WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
procedura FormCreate (Sender: TObject);
prywatny
procedura Document_OnMouseOver;
publiczny
{ Publiczny deklaracje}
koniec;
var
Form1: TForm1;
htmlDoc: IHTMLDocument2;
realizacja
{$ R * .dfm}
procedura TForm1.Document_OnMouseOver;
var
element: IHTMLElement;
zaczynać
gdyby htmlDoc = zeronastępnie Wyjście;
element: = htmlDoc.parentWindow.event.srcElement;
elementInfo. Jasny;
gdyby LowerCase (element.tagName) = 'a' następnie
zaczynać
elementInfo. Linie. Dodaj („LINK info ...”);
elementInfo. Linie. Add (Format ('HREF:% s', [element.getAttribute ('href', 0)]));
koniec
jeszczegdyby LowerCase (element.tagName) = 'img' następnie
zaczynać
elementInfo. Linie. Dodaj („Informacje o zdjęciu ...”);
elementInfo. Linie. Add (Format ('SRC:% s', [element.getAttribute ('src', 0)]));
koniec
jeszcze
zaczynać
elementInfo. Linie. Add (Format ('TAG:% s', [element.tagName]));
koniec;
koniec; (* Document_OnMouseOver *)
procedura TForm1.FormCreate (Sender: TObject);
zaczynać
WebBrowser1.Navigate (' http://delphi.about.com') ;
elementInfo. Jasny;
elementInfo. Linie. Dodaj („Najedź myszką na dokument ...”);
koniec; (* FormCreate *)
procedura TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, flagi, TargetFrameName, PostData, nagłówki: OleVariant; var Anuluj: WordBool);
zaczynać
htmlDoc: = zero;
koniec; (* WebBrowser1BeforeNavigate2 *)
procedura TForm1.WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
zaczynać
gdyby Przypisany (WebBrowser1.Document) następnie
zaczynać
htmlDoc: = WebBrowser1.Document tak jak IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. Utwórz (Document_OnMouseOver) tak jak IDispatch);
koniec;
koniec; (* WebBrowser1DocumentComplete *)
{TEventObject}
konstruktor TEventObject. Stwórz(const OnEvent: TObjectProcedure);
zaczynać
dziedziczny Stwórz;
FOnEvent: = OnEvent;
koniec;
funkcjonować TEventObject. GetIDsOfNames (const IID: TGUID; Nazwy: Wskaźnik; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
zaczynać
Wynik: = E_NOTIMPL;
koniec;
funkcjonować TEventObject. GetTypeInfo (Index, LocaleID: Integer; out TypeInfo): HResult;
zaczynać
Wynik: = E_NOTIMPL;
koniec;
funkcjonować TEventObject. GetTypeInfoCount (out Count: Integer): HResult;
zaczynać
Wynik: = E_NOTIMPL;
koniec;
funkcjonować TEventObject. Invoke (DispID: Integer; const IID: TGUID; LocaleID: Integer; Flagi: Słowo; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
zaczynać
gdyby (DispID = DISPID_VALUE) następnie
zaczynać
gdyby Przypisany (FOnEvent) następnie FOnEvent;
Wynik: = S_OK;
koniec
jeszcze Wynik: = E_NOTIMPL;
koniec;
koniec.

instagram story viewer