एक TWebBrowser दस्तावेज़ में हाइपरलिंक का यूआरएल प्राप्त करें

अधिकांश स्थितियों में आप उपयोगकर्ता को HTML दस्तावेज़ प्रदर्शित करने के लिए TWebBrowser का उपयोग करते हैं - इस प्रकार (इंटरनेट एक्सप्लोरर) वेब ब्राउज़र का अपना संस्करण बनाना। ध्यान दें कि TWebBrowser उदाहरण के लिए, Word दस्तावेज़ भी प्रदर्शित कर सकता है।

ब्राउज़र की एक बहुत अच्छी सुविधा लिंक जानकारी प्रदर्शित करना है, उदाहरण के लिए, स्थिति बार में, जब माउस एक दस्तावेज़ में एक लिंक पर होवर करता है।

TWebBrowser "OnMouseMove" जैसी घटना को उजागर नहीं करता है। यहां तक ​​कि अगर इस तरह की घटना मौजूद होती है, तो इसे टीडब्लूब्रॉसर घटक के लिए निकाल दिया जाएगा - टीडब्लूब्रोसर के अंदर प्रदर्शित होने वाले दस्तावेज़ के लिए नहीं।

इस तरह की जानकारी प्रदान करने के लिए (और जैसा कि आप एक पल में देखेंगे) अपने डेल्फी एप्लिकेशन में टीडब्लूब्रोसर घटक, एक तकनीक का उपयोग करके कहा जाता है "घटनाएँ डूबना"लागू होना चाहिए।

आपके द्वारा कॉल किए गए TWebBrowser घटक का उपयोग करके वेब पेज पर नेविगेट करने के लिए नेविगेट तरीका। दस्तावेज़ TWebBrowser की संपत्ति a IHTMLDocument2 मूल्य (वेब ​​दस्तावेजों के लिए)। इस इंटरफ़ेस का उपयोग दस्तावेज़ के बारे में जानकारी प्राप्त करने, दस्तावेज़ के भीतर HTML तत्वों और पाठ को संशोधित करने और संबंधित घटनाओं को संसाधित करने के लिए किया जाता है।

instagram viewer

दस्तावेज़ के अंदर "टैग" के "href" विशेषता (लिंक) को प्राप्त करने के लिए, जबकि माउस एक दस्तावेज़ पर घूमता है, आपको IHTMLDocument2 के "onmousemove" घटना पर प्रतिक्रिया करने की आवश्यकता है।

चूंकि हम एक तत्व के HREF विशेषता में रुचि रखते हैं - एक लिंक के URL को दिखाने के लिए माउस खत्म हो गया है, इसलिए हम "ओनमूसमोव" घटना को सिंक करेंगे।

जैसा कि ऊपर बताया गया है, हम एक दस्तावेज़ के onmousemove घटना को एक TWBBrowser की OnDocumentComplete घटना में संलग्न करते हैं:

इकाई यूनिट 1;
इंटरफेस
का उपयोग करता है
विंडोज, संदेश, SysUtils, वेरिएंट, कक्षाएं, ग्राफिक्स, नियंत्रण, प्रपत्र,
डायलॉग्स, ओलेक्रेट्स, SHDocVw, MSHTML, ActiveX, StdCtrls;
प्रकार
TobjectProcedure = प्रक्रियाकावस्तु;
TEventObject = कक्षा(TInterfacedObject, IDispatch)
निजी
फोनेट: टोब्जेक्टप्रोडेक्चर;
संरक्षित
समारोह GetTypeInfoCount (बाहर की गणना: पूर्णांक): HResult; stdcall;
समारोह GetTypeInfo (इंडेक्स, लोकेलिड: इंटेगर; TypeInfo): HResult; stdcall;
समारोह GetIDsOfNames (स्थिरांक IID: TGUID; नाम: सूचक; NameCount, LocaleID: इंटेगर; विवाद: सूचक): HResult; stdcall;
समारोह आह्वान (विवाद: पूर्णांक; स्थिरांक IID: TGUID; लोकेलिड: इंटेगर; झंडे: शब्द; वर पैरामीटर; VarResult, ExcepInfo, ArgErr: सूचक): HResult; stdcall;
जनता
निर्माता सृजन करना(स्थिरांक OnEvent: TObjectProcedure);
संपत्ति OnEvent: TobjectProcedure पढ़े गए FnEvent को FOnEvent लिखें;
समाप्त;
TForm1 = कक्षा(TForm)
WebBrowser1: TWebBrowser;
elementInfo: TMemo;
प्रक्रिया WebBrowser1BeforeNavigate2 (ASender: Tobject; स्थिरांक pDisp: IDispatch; वर URL, झंडे, TargetFrameName, PostData, हेडर: OleVariant; वर रद्द करें: वर्डबुल);
प्रक्रिया WebBrowser1DocumentComplete (ASender: TObject; स्थिरांक pDisp: IDispatch; वर URL: ओलेवरीयंट);
प्रक्रिया फॉर्मक्रिएट (प्रेषक: TObject);
निजी
प्रक्रिया Document_OnMouseOver;
जनता
{ जनता घोषणाएँ}
समाप्त;
वर
फॉर्म 1: TForm1;
htmlDoc: IHTMLDocument2;
कार्यान्वयन
{$ R * .dfm}
प्रक्रिया TForm1.Document_OnMouseOver;
वर
तत्व: IHTMLElement;
शुरू
अगर htmlDoc = शून्यफिर बाहर जाएं;
तत्व: = htmlDoc.parentWindow.event.srcElement;
elementInfo। स्पष्ट;
अगर लोअरकेस (element.tagName) = 'ए' फिर
शुरू
elementInfo। लाइन्स। जोड़ें ('लिंक जानकारी ...');
elementInfo। लाइन्स। जोड़ें (प्रारूप ('HREF:% s', [element.getAttribute ('href', 0)]));
समाप्त
अन्यअगर लोअरकेस (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; स्थिरांक pDisp: IDispatch; वर URL, झंडे, TargetFrameName, PostData, हेडर: OleVariant; वर रद्द करें: वर्डबुल);
शुरू
htmlDoc: = शून्य;
समाप्त; (* WebBrowser1BeforeNavigate2 *)
प्रक्रिया TForm1.WebBrowser1DocumentComplete (ASender: TObject; स्थिरांक pDisp: IDispatch; वर URL: ओलेवरीयंट);
शुरू
अगर सौंपा (WebBrowser1.Document) फिर
शुरू
htmlDoc: = WebBrowser1.Document जैसा IHTMLDocument2;
htmlDoc.onmouseover: = (TEventObject बनाएं (Document_OnMouseOver) जैसा IDispatch);
समाप्त;
समाप्त; (* WebBrowser1DocumentComplete *)
{TEventObject}
निर्माता TEventObject। सृजन करना(स्थिरांक OnEvent: TObjectProcedure);
शुरू
विरासत में मिला सृजन करना;
फोनेट: = ओनवेंट;
समाप्त;
समारोह TEventObject। GetIDsOfNames (स्थिरांक IID: TGUID; नाम: सूचक; NameCount, LocaleID: इंटेगर; विवाद: सूचक): HResult;
शुरू
परिणाम: = E_NOTIMPL;
समाप्त;
समारोह TEventObject। GetTypeInfo (इंडेक्स, लोकेलिड: इंटेगर; TypeInfo): HResult;
शुरू
परिणाम: = E_NOTIMPL;
समाप्त;
समारोह TEventObject। GetTypeInfoCount (बाहर की गणना: पूर्णांक): HResult;
शुरू
परिणाम: = E_NOTIMPL;
समाप्त;
समारोह TEventObject। आह्वान (विवाद: पूर्णांक; स्थिरांक IID: TGUID; लोकेलिड: इंटेगर; झंडे: शब्द; वर पैरामीटर; VarResult, ExcepInfo, ArgErr: सूचक): HResult;
शुरू
अगर (विवाद = DISPID_VALUE) फिर
शुरू
अगर सौंपी गई (फूल) फिर FOnEvent;
परिणाम: = S_OK;
समाप्त
अन्य परिणाम: = E_NOTIMPL;
समाप्त;
समाप्त.