CppWebBrowser - Link-URL unter Maus ermitteln



  • Hallo!
    Wenn ich ein CppWebBrowser auf mein Form setzte, und mit der Maus auf ein Link gehe, wie kann ich mir die Url von dem Link anzeigen lassen? z.B. in einem Label

    Danke

    [ Dieser Beitrag wurde am 14.06.2003 um 16:36 Uhr von Jansen editiert. ]



  • Kann mir niemand weiter helfen?



  • Aus den Borland-Newsgroups:

    #include <mshtml.h>
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
      TCppWebBrowser *wbMain = CppWebBrowser1;
      IHTMLDocument2 *pDoc = NULL;
      IHTMLElement *pElement = NULL;
      IHTMLAnchorElement *pAnchor = NULL;
      bool blUrl = false;
    
      try
      {
        if(wbMain->Document == NULL)
          return;
    
        WideString wURL;
        POINT p;
    
        if(SUCCEEDED(wbMain->Document->QueryInterface(IID_IHTMLDocument2,(LPVOID*)&pDoc)))
        {
          if(pDoc == NULL)
            return;
    
          GetCursorPos(&p);
          p = wbMain->ScreenToClient(p);
          if(SUCCEEDED(pDoc->elementFromPoint(p.x, p.y, &pElement)))
          {
            if(pElement == NULL)
              return;
    
            if(SUCCEEDED(pElement->QueryInterface(IID_IHTMLAnchorElement,(LPVOID*)&pAnchor)))
            {
              if(pAnchor == NULL)
                return;
    
              if(SUCCEEDED(pAnchor->get_href(&wURL)))
              {
                blUrl = true;
                Label1->Caption = AnsiString(wURL);
              }
            }
          }
        }
      }
      __finally
      {
        if(!blUrl)
          Label1->Caption = "";
        if(pDoc != NULL)
          pDoc->Release();
        if(pElement != NULL)
          pElement->Release();
        if(pAnchor != NULL)
          pAnchor->Release();
      }
    }
    //---------------------------------------------------------------------------
    

    Da es im CppWebBrowser kein "OnMouseOverLink"-Event gibt wird der Code in einem OnTimer-Event mit 100ms-Intervall aufgerufen. Eine weitere Einschränkung ist die, dass der Code offensichtlich nur mit Textlinks funktioniert.

    [ Dieser Beitrag wurde am 14.06.2003 um 16:49 Uhr von Jansen editiert. ]



  • hallo !
    Falls es jemand wissen will, ich habe es jetzt so gelöst:

    void __fastcall TForm1::CppWebBrowser1StatusTextChange(TObject *Sender,
          BSTR URL)
     {
     StatusBar1->SimpleText = URL;
     }
    

    So werden auch die Url's von den Bildern angezeigt.
    bye bye 🙂

    [ Dieser Beitrag wurde am 06.10.2002 um 08:41 Uhr von easy editiert. ]

    [ Dieser Beitrag wurde am 06.10.2002 um 08:42 Uhr von easy editiert. ]



  • Ha, warum einfach wenn's auch umständlich geht!? 😉

    Nur der entsprechende Text in der Hilfe gibt einem zu denken:

    Do not use this event. It is included in the TCppWebBrowser interface because the IWebBrowser2 interface is shared with Internet Explorer. OnStatusTextChange occurs when the text displayed in the Internet Explorer’s status bar changes.


Log in to reply