الحصول على رابط رابط تشعبي في وثيقة TWebBrowser

click fraud protection

في معظم الحالات ، تستخدم TWebBrowser لعرض مستندات HTML للمستخدم - وبالتالي إنشاء نسختك الخاصة من متصفح الويب (Internet Explorer). لاحظ أن TWebBrowser يمكنه أيضًا عرض مستندات Word ، على سبيل المثال.

ميزة لطيفة للغاية في المستعرض هي عرض معلومات الارتباط ، على سبيل المثال ، في شريط الحالة ، عندما يمر الماوس فوق ارتباط في مستند.

لا يكشف TWebBrowser عن حدث مثل "OnMouseMove". حتى إذا كان مثل هذا الحدث موجودًا ، فسيتم تشغيله لمكون TWebBrowser - وليس للمستند الذي يتم عرضه داخل TWebBrowser.

من أجل توفير هذه المعلومات (وأكثر من ذلك بكثير ، كما سترى في لحظة) في تطبيق دلفي الخاص بك باستخدام مكون TWebBrowser ، وهي تقنية تسمى "غرق الأحداث"يجب أن ترتكب.

للانتقال إلى صفحة ويب باستخدام مكون TWebBrowser الذي تتصل به التنقل طريقة. ال وثيقة إرجاع خاصية TWebBrowser IHTMLDocument2 القيمة (لوثائق الويب). تُستخدم هذه الواجهة لاسترداد معلومات حول مستند ، لفحص وتعديل عناصر HTML والنص داخل المستند ، ومعالجة الأحداث ذات الصلة.

للحصول على سمة (رابط) "href" لعلامة "a" داخل مستند ، بينما يحوم الماوس فوق مستند ، تحتاج إلى الرد على حدث "onmousemove" الخاص بـ IHTMLDocument2.

instagram viewer

نظرًا لأننا مهتمون بسمة HREF الخاصة بعنصر A - من أجل إظهار عنوان URL الخاص بالرابط الذي انتهى الماوس ، فإننا سنغرق حدث "onmousemove".

كما هو موضح أعلاه ، نعلق الحدث onmousemove لمستند في الحدث OnDocumentComplete من TWebBrowser:

وحدة وحدة 1؛
واجهه المستخدم
الاستخدامات
Windows ، الرسائل ، SysUtils ، المتغيرات ، الفصول ، الرسومات ، عناصر التحكم ، النماذج ،
مربعات الحوار ، OleCtrls ، SHDocVw ، MSHTML ، ActiveX ، StdCtrls ؛
اكتب
TObjectProcedure = إجراءمنموضوع;
TEventObject = صف دراسي(TInterfacedObject ، IDispatch)
نشر
FOnEvent: TObjectProcedure ؛
محمي
وظيفة GetTypeInfoCount (عدد العد: عدد صحيح): HResult؛ stdcall.
وظيفة GetTypeInfo (فهرس ، اللغة المحلية: عدد صحيح ؛ خارج TypeInfo): HResult؛ stdcall.
وظيفة GetIDsOfNames (مقدار ثابت IID: TGUID ؛ الأسماء: المؤشر ؛ NameCount ، LocaleID: Integer؛ DispIDs: المؤشر): HResult؛ stdcall.
وظيفة استدعاء (DispID: عدد صحيح ؛ مقدار ثابت IID: TGUID ؛ LocaleID: عدد صحيح الأعلام: كلمة. فار بارامس VarResult، ExcepInfo، ArgErr: Pointer): HResult؛ stdcall.
عامة
البناء خلق(مقدار ثابت OnEvent: TObjectProcedure) ؛
خاصية OnEvent: TObjectProcedure قراءة FOnEvent إرسال FOnEvent؛
النهاية;
TForm1 = صف دراسي(TForm)
WebBrowser1: TWebBrowser؛
elementInfo: TMemo؛
إجراء WebBrowser1BeforeNavigate2 (ASender: TObject؛ مقدار ثابت pDisp: IDispatch؛ فار عنوان URL ، أعلام ، TargetFrameName ، PostData ، رؤوس: OleVariant؛ فار إلغاء: WordBool) ؛
إجراء WebBrowser1DocumentComplete (ASender: TObject؛ مقدار ثابت pDisp: IDispatch؛ فار عنوان URL: OleVariant) ؛
إجراء FormCreate (المرسل: TObject) ؛
نشر
إجراء Document_OnMouseOver؛
عامة
{ عامة تصريحات}
النهاية;
فار
Form1: TForm1 ؛
htmlDoc: IHTMLDocument2؛
التنفيذ
{$ R * .dfm}
إجراء TForm1.Document_OnMouseOver؛
فار
العنصر: IHTMLElement؛
ابدأ
إذا htmlDoc = لا شيءثم خروج؛
element: = htmlDoc.parentWindow.event.srcElement؛
elementInfo. واضح؛
إذا LowerCase (element.tagName) = 'a' ثم
ابدأ
elementInfo. خطوط. إضافة ('LINK info ...') ؛
elementInfo. خطوط. إضافة (تنسيق ('HREF:٪ s' ، [element.getAttribute ('href' ، 0)])) ؛
النهاية
آخرإذا LowerCase (element.tagName) = 'img' ثم
ابدأ
elementInfo. خطوط. إضافة ('IMAGE info ...') ؛
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؛ مقدار ثابت pDisp: IDispatch؛ فار عنوان URL ، أعلام ، TargetFrameName ، PostData ، رؤوس: OleVariant؛ فار إلغاء: WordBool) ؛
ابدأ
htmlDoc: = لا شيء;
النهاية; (* WebBrowser1BeforeNavigate2 *)
إجراء TForm1.WebBrowser1DocumentComplete (ASender: TObject؛ مقدار ثابت pDisp: IDispatch؛ فار عنوان URL: OleVariant) ؛
ابدأ
إذا معين (WebBrowser1.Document) ثم
ابدأ
htmlDoc: = WebBrowser1.Document مثل IHTMLDocument2؛
htmlDoc.onmouseover: = (TEventObject. إنشاء (Document_OnMouseOver) مثل IDispatch) ؛
النهاية;
النهاية; (* WebBrowser1DocumentComplete *)
{TEventObject}
البناء TEventObject. خلق(مقدار ثابت OnEvent: TObjectProcedure) ؛
ابدأ
وارث خلق؛
FOnEvent: = OnEvent؛
النهاية;
وظيفة TEventObject. GetIDsOfNames (مقدار ثابت IID: TGUID ؛ الأسماء: المؤشر ؛ NameCount ، LocaleID: Integer؛ DispIDs: المؤشر): HResult؛
ابدأ
النتيجة: = E_NOTIMPL ؛
النهاية;
وظيفة TEventObject. GetTypeInfo (فهرس ، اللغة المحلية: عدد صحيح ؛ خارج TypeInfo): HResult؛
ابدأ
النتيجة: = E_NOTIMPL ؛
النهاية;
وظيفة TEventObject. GetTypeInfoCount (عدد العد: عدد صحيح): HResult؛
ابدأ
النتيجة: = E_NOTIMPL ؛
النهاية;
وظيفة TEventObject. استدعاء (DispID: عدد صحيح ؛ مقدار ثابت IID: TGUID ؛ LocaleID: عدد صحيح الأعلام: كلمة. فار بارامس VarResult، ExcepInfo، ArgErr: Pointer): HResult؛
ابدأ
إذا (DISID = DISPID_VALUE) ثم
ابدأ
إذا معين (FOnEvent) ثم FOnEvent
النتيجة: = S_OK ؛
النهاية
آخر النتيجة: = E_NOTIMPL ؛
النهاية;
النهاية.

instagram story viewer