Obtener la URL de un hipervínculo en un documento TWebBrowser

click fraud protection

En la mayoría de las situaciones, utiliza TWebBrowser para mostrar documentos HTML al usuario, creando así su propia versión del navegador web (Internet Explorer). Tenga en cuenta que TWebBrowser también puede mostrar documentos de Word, por ejemplo.

Una característica muy agradable de un navegador es mostrar información de enlaces, por ejemplo, en la barra de estado, cuando el mouse se desplaza sobre un enlace en un documento.

El TWebBrowser no expone un evento como "OnMouseMove". Incluso si existiera dicho evento, se activaría para el componente TWebBrowser, NO para el documento que se muestra dentro del TWebBrowser.

Para proporcionar dicha información (y mucho más, como verá en un momento) en su aplicación Delphi usando el componente TWebBrowser, una técnica llamada "eventos que se hunden"debe ser implementado.

Para navegar a una página web utilizando el componente TWebBrowser, llame al Navegar método. los Documento propiedad del TWebBrowser devuelve un IHTMLDocument2 valor (para documentos web). Esta interfaz se utiliza para recuperar información sobre un documento, para examinar y modificar los elementos HTML y el texto dentro del documento, y para procesar eventos relacionados.

instagram viewer

Para obtener el atributo "href" (enlace) de una etiqueta "a" dentro de un documento, mientras el mouse se desplaza sobre un documento, debe reaccionar ante el evento "onmousemove" del IHTMLDocument2.

Dado que estamos interesados ​​en el atributo HREF de un elemento A, para mostrar la URL de un enlace que el mouse ha terminado, hundiremos el evento "onmousemove".

Como se explicó anteriormente, adjuntamos al evento onmousemove de un documento en el evento OnDocumentComplete de un TWebBrowser:

unidad Unidad 1;
interfaz
usos
Windows, Mensajes, SysUtils, Variantes, Clases, Gráficos, Controles, Formularios,
Diálogos, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
tipo
TObjectProcedure = procedimientodeobjeto;
TEventObject = clase(TInterfacedObject, IDispatch)
privado
FOnEvent: TObjectProcedure;
protegido
función GetTypeInfoCount (Out Count: Integer): HResult; stdcall;
función GetTypeInfo (Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;
función GetIDsOfNames (const IID: TGUID; Nombres: puntero; NameCount, LocaleID: Integer; DispIDs: puntero): HResult; stdcall;
función Invocar (DispID: Integer; const IID: TGUID; LocaleID: entero; Banderas: Palabra; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;
público
constructor Crear(const OnEvent: TObjectProcedure);
propiedad OnEvent: TObjectProcedure lee FOnEvent escribe FOnEvent;
final;
TForm1 = clase(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
procedimiento WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, banderas, TargetFrameName, PostData, encabezados: OleVariant; var Cancelar: WordBool);
procedimiento WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
procedimiento FormCreate (remitente: TObject);
privado
procedimiento Document_OnMouseOver;
público
{ Público declaraciones}
final;
var
Form1: TForm1;
htmlDoc: IHTMLDocument2;
implementación
{$ R * .dfm}
procedimiento TForm1.Document_OnMouseOver;
var
elemento: IHTMLElement;
empezar
Si htmlDoc = nuloluego Salida;
elemento: = htmlDoc.parentWindow.event.srcElement;
elementInfo. Claro;
Si LowerCase (element.tagName) = 'a' luego
empezar
elementInfo. Líneas. Agregar ('INFORMACIÓN DE ENLACE ...');
elementInfo. Líneas. Add (Format ('HREF:% s', [element.getAttribute ('href', 0)]));
final
másSi LowerCase (element.tagName) = 'img' luego
empezar
elementInfo. Líneas. Añadir ('IMAGEN info ...');
elementInfo. Líneas. Add (Format ('SRC:% s', [element.getAttribute ('src', 0)]));
final
más
empezar
elementInfo. Líneas. Agregar (Formato ('TAG:% s', [element.tagName]));
final;
final; (* Document_OnMouseOver *)
procedimiento TForm1.FormCreate (Remitente: TObject);
empezar
WebBrowser1.Navigate (' http://delphi.about.com') ;
elementInfo. Claro;
elementInfo. Líneas. Agregar ('Mueva el mouse sobre el documento ...');
final; (* FormCreate *)
procedimiento TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, banderas, TargetFrameName, PostData, encabezados: OleVariant; var Cancelar: WordBool);
empezar
htmlDoc: = nulo;
final; (* WebBrowser1BeforeNavigate2 *)
procedimiento TForm1.WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
empezar
Si Asignado (WebBrowser1.Document) luego
empezar
htmlDoc: = WebBrowser1.Document como IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. Crear (Document_OnMouseOver) como IDispatch);
final;
final; (* WebBrowser1DocumentComplete *)
{TEventObject}
constructor TEventObject. Crear(const OnEvent: TObjectProcedure);
empezar
heredado Crear;
FOnEvent: = OnEvent;
final;
función TEventObject. GetIDsOfNames (const IID: TGUID; Nombres: puntero; NameCount, LocaleID: Integer; DispIDs: puntero): HResult;
empezar
Resultado: = E_NOTIMPL;
final;
función TEventObject. GetTypeInfo (Index, LocaleID: Integer; out TypeInfo): HResult;
empezar
Resultado: = E_NOTIMPL;
final;
función TEventObject. GetTypeInfoCount (Out Count: Integer): HResult;
empezar
Resultado: = E_NOTIMPL;
final;
función TEventObject. Invocar (DispID: Integer; const IID: TGUID; LocaleID: entero; Banderas: Palabra; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;
empezar
Si (DispID = DISPID_VALUE) luego
empezar
Si Asignado (FOnEvent) luego Cuarto evento;
Resultado: = S_OK;
final
más Resultado: = E_NOTIMPL;
final;
final.

instagram story viewer