קבל את כתובת האתר של היפר-קישור במסמך TWebBrowser

ברוב המצבים אתה משתמש ב- TWebBrowser כדי להציג מסמכי HTML למשתמש - ובכך ליצור גרסה משלך לדפדפן האינטרנט (Internet Explorer). שים לב כי TWebBrowser יכול להציג גם מסמכי Word, למשל.

תכונה נחמדה מאוד של דפדפן היא הצגת מידע על קישור, למשל בסרגל המצב, כאשר העכבר מרחף מעל קישור במסמך.

ה- TWebBrowser לא חושף אירוע כמו "OnMouseMove". גם אם אירוע כזה היה קיים, הוא יורה עבור רכיב TWebBrowser - לא עבור המסמך שמוצג בתוך TWebBrowser.

על מנת לספק מידע כזה (והרבה יותר, כפי שתראו ברגע) ביישום דלפי שלכם באמצעות רכיב TWebBrowser, טכניקה שנקראת "אירועים שוקעים"חייבים להיות מיושמים.

כדי לנווט לדף אינטרנט באמצעות רכיב TWebBrowser אליו אתה מתקשר נווט שיטה. ה מסמך המאפיין של TWebBrowser מחזיר IHTMLDocument2 ערך (למסמכי אינטרנט). ממשק זה משמש לאחזור מידע אודות מסמך, לבחינה ושינוי האלמנטים והטקסט של HTML בתוך המסמך ולעיבוד אירועים קשורים.

כדי לקבל את התכונה "href" של קישור "תג" בתוך מסמך, בעוד העכבר מרחף מעל מסמך, עליך להגיב על האירוע "onmousemove" של IHTMLDocument2.

מכיוון שאנו מעוניינים במאפיין HREF של אלמנט A - על מנת להציג את כתובת האתר של קישור שעבר העכבר, אנו נטביע את האירוע "onmousemove".

instagram viewer

כפי שהוסבר לעיל, אנו מצרפים לאירוע המקומי של מסמך באירוע OnDocumentComplete של TWebBrowser:

יחידה יחידה 1;
ממשק
שימושים
Windows, הודעות, SysUtils, גרסאות, שיעורים, גרפיקה, בקרות, טפסים,
דיאלוגים, OleCtrls, SHDocVw, MSHTML, ActiveX, StdCtrls;
סוג
TObjectProcedure = תהליךשלחפץ;
TEventObject = מעמד(TInterfacedObject, IDispatch)
פרטי
FOnEvent: TObjectProcedure;
מוגן
פונקציה GetTypeInfoCount (ספירת out: מספר שלם): HResult; stdcall;
פונקציה GetTypeInfo (אינדקס, אזור ID: מספר שלם; out TypeInfo): HResult; stdcall;
פונקציה GetIDsOfNames (const IID: TGUID; שמות: מצביע; NameCount, LocaleID: מספר שלם; דיספידים: מצביע): HResult; stdcall;
פונקציה להפעיל (DispID: מספר שלם; const IID: TGUID; מספר אזור: מספר שלם; דגלים: Word; var פארמים; VarResult, ExceptInfo, ArgErr: Pointer): HResult; stdcall;
ציבורי
בנאי צור (const OnEvent: TObjectProcedure);
תכונה OnEvent: TObjectProcedure לקרוא FOnEvent לכתוב FOnEvent;
סוף;
TForm1 = מעמד(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
תהליך WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, דגלים, TargetFrameName, PostData, כותרות: OleVariant; var ביטול: WordBool);
תהליך WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
תהליך FormCreate (שולח: TObject);
פרטי
תהליך Document_OnMouseOver;
ציבורי
{ ציבורי הצהרות}
סוף;
var
טופס 1: TForm1;
htmlDoc: IHTMLDocument2;
יישום
{$ R * .dfm}
תהליך TForm1.Document_OnMouseOver;
var
אלמנט: IHTMLElement;
התחל
אם htmlDoc = אפסלאחר מכן יציאה;
אלמנט: = htmlDoc.parentWindow.event.srcElement;
elementInfo. ברור;
אם LowerCase (element.tagName) = 'a' לאחר מכן
התחל
elementInfo. שורות. הוסף ('מידע על LINK ...');
elementInfo. שורות. הוסף (פורמט ('HREF:% s', [element.getAttribute ('href', 0)]));
סוף
אחראם LowerCase (element.tagName) = 'img' לאחר מכן
התחל
elementInfo. שורות. הוסף ('מידע על תמונה ...');
elementInfo. שורות. הוסף (פורמט ('SRC:% s', [element.getAttribute ('src', 0)]));
סוף
אחר
התחל
elementInfo. שורות. הוסף (פורמט ('TAG:% s', [element.tagName]));
סוף;
סוף; (* Document_OnMouseOver *)
תהליך TForm1.FormCreate (שולח: TObject);
התחל
WebBrowser1.Navigate (' http://delphi.about.com') ;
elementInfo. ברור;
elementInfo. שורות. הוסף ('העבר את העכבר מעל המסמך ...');
סוף; (* FormCreate *)
תהליך TForm1.WebBrowser1BeforeNavigate2 (ASender: TObject; const pDisp: IDispatch; var URL, דגלים, TargetFrameName, PostData, כותרות: OleVariant; var ביטול: WordBool);
התחל
htmlDoc: = אפס;
סוף; (* WebBrowser1BeforeNavigate2 *)
תהליך TForm1.WebBrowser1DocumentComplete (ASender: TObject; const pDisp: IDispatch; var URL: OleVariant);
התחל
אם הוקצה (WebBrowser1.Document) לאחר מכן
התחל
htmlDoc: = WebBrowser1.Document כפי ש IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject. צור (Document_OnMouseOver) כפי ש IDispatch);
סוף;
סוף; (* WebBrowser1Document השלמה *)
{TEventObject}
בנאי TEventObject. צור (const OnEvent: TObjectProcedure);
התחל
ירש צור;
FOnEvent: = OnEvent;
סוף;
פונקציה TEventObject. GetIDsOfNames (const IID: TGUID; שמות: מצביע; NameCount, LocaleID: מספר שלם; דיספידים: מצביע): HResult;
התחל
תוצאה: = E_NOTIMPL;
סוף;
פונקציה TEventObject. GetTypeInfo (אינדקס, אזור ID: מספר שלם; out TypeInfo): HResult;
התחל
תוצאה: = E_NOTIMPL;
סוף;
פונקציה TEventObject. GetTypeInfoCount (ספירת out: מספר שלם): HResult;
התחל
תוצאה: = E_NOTIMPL;
סוף;
פונקציה TEventObject. להפעיל (DispID: מספר שלם; const IID: TGUID; מספר אזור: מספר שלם; דגלים: Word; var פארמים; VarResult, ExceptInfo, ArgErr: Pointer): HResult;
התחל
אם (DispID = DISPID_VALUE) לאחר מכן
התחל
אם הוקצה (FOnEvent) לאחר מכן FOnEvent;
תוצאה: = S_OK;
סוף
אחר תוצאה: = E_NOTIMPL;
סוף;
סוף.

instagram story viewer