vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Kontextmenü im AxWebBrowser - Lösungsansatz 
Autor: Drapondur
Datum: 16.04.04 17:53

Hallo,

ich habe eine Lösung für das Problem. Allerdings habe ich Sie bislang nicht gepostet, da sie nicht eben elegant ist. Ich habe lieber gewartet, weil ich dachte jemand anderes habe vielleicht eine bessere Lösung.

Nach dem Posting von Benjamin@vb habe ich jedoch beschlossen, meine Lösung hier zu posten.

Beim Testen bitte beachten, dass das Kontextmenü erst zur Verfügung steht, wenn das Dokument vollständig fertig geladen ist.

Vorgehensweise:

1. Eine Form erstellen und ein Webbrowsercontrol namens AxWebBrowser1 darauf positionieren.

2. Ein Kontextmenü mnuBrowser auf der Form platzieren mit einem Menuitem namens miBrItem01.

3. Eine private Variable myDoc für das HTML-Dokumentobjekt des Browsers deklarieren.
Private WithEvents myDoc As mshtml.HTMLDocumentClass
4. Zum DocumentComplete-Event des Webbrowsers folgenden Code schreiben:
    Private Sub AxWebBrowser1_DocumentComplete( _
        ByVal sender As Object, _
        ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) _
        Handles AxWebBrowser1.DocumentComplete
 
        myDoc = CType(AxWebBrowser1.Document, mshtml.HTMLDocumentClass)
 
    End Sub
5. Anschließend den Code für das OnContextMenuEvent des Dokument-Objekts schreiben.
    Private Function myDoc_HTMLDocumentEvents2_Event_oncontextmenu( _
        ByVal pEvtObj As mshtml.IHTMLEventObj) _
        As Boolean _
        Handles myDoc.HTMLDocumentEvents2_Event_oncontextmenu
 
        'ACHTUNG: der Event steht erst zur Verfügung, wenn das Dokument 
        'komplett geladen worden ist
        Dim pt As Point
 
        'Umrechnen der Mauskoordinaten des Contextmenu-Events in 
        ' Fensterkoordinaten
        'der Form auf der das Webbrowsercontrol ist
        pt = PointFromHtmlEvent(pEvtObj)
 
        'Nun das Kontextmenu anzeigen
        mnuBrowser.Show(AxWebBrowser1.Parent, pt)
 
        Return False
    End Function
ACHTUNG: Wenn man den Code automatisch vom Visual-Studio erzeugen lässt, indem man im Dropdownmenu in der IDE den Event auswählt, wird der Event-Code nicht richtig erzeugt. Statt einer Funktion, die einen bool’schen Wert zurückgibt, erhält man eine Sub. Man muss die Prozedur also zuerst umschreiben.

6. Nun noch eine Funktion einfügen, die die Koordinaten des ContextMenu-Events in Fensterkoordinaten umrechnet.
Private Function PointFromHtmlEvent(ByVal pEvtObj As mshtml.IHTMLEventObj) As _
  Point
        'rechnet die Koordinaten eines HtmlEvents in Fensterkoordinaten um
        Dim x%, y%
        Dim el As mshtml.IHTMLElement
        Dim elBody As mshtml.HTMLBodyClass
        Dim ptRet As Point
 
        'Koordinaten relativ zum Source-Element, in dem das 
        'Ereignis stattgefunden hat ermitteln
        x = pEvtObj.offsetX
        y = pEvtObj.offsetY
 
        'Die Koordinaten des Source-Elements relativ
        'zum Body des HTML-Documents ermitteln
        el = pEvtObj.srcElement
        elBody = myDoc.body
        Do
            x = x + el.offsetLeft
            y = y + el.offsetTop
            el = el.offsetParent
            If el Is Nothing Then
                Exit Do
            End If
        Loop Until el Is elBody
 
        'Wenn die Seite gescrollt ist, die Scroll-Weiten wieder
        'von den Koordinaten abziehen
        x = x - elBody.scrollLeft
        y = y - elBody.scrollTop
 
        'zum Schluss die Position des Browsercontrols hinzuaddieren 
        'jetzt hat man die Koordinaten relativ zu dem Control
        'das der Container des Browser-Steuerelements ist
        x = x + AxWebBrowser1.Left
        y = y + AxWebBrowser1.Top
 
        ptRet = New Point(x, y)
        Return ptRet
    End Function
7. Zum Schluss noch einen Ereignishandler für das MenuItem miBrItem02 des Contextmenüs schreiben
    Private Sub miBrItem01_Click( _
        ByVal sender As Object, _
        ByVal e As System.EventArgs) _
        Handles miBrItem01.Click
 
        Dim mi As MenuItem = CType(sender, MenuItem)
        MsgBox("Klick on " & mi.Text)
    End Sub
8. Anscheinend werden alle Events des Dokument-Objekts „verschluckt“. So funktioniert beispielsweise ein Klick auf einen Link nicht mehr. Deswegen muss man auch noch die anderen Dokument-Ereignisse implementieren. Z.B.
    Private Function myDoc_HTMLDocumentEvents2_Event_onclick( _
        ByVal pEvtObj As mshtml.IHTMLEventObj) _
        As Boolean _
        Handles myDoc.HTMLDocumentEvents2_Event_onclick
 
        'Der Event muss rein, weil sonst Klickevents "verschluckt" werden
        'gleiches gilt, so vermute ich, auch für alle anderen Events des 
        ' Document-Objekts
        Return True
    End Function
Hier sollte eigentlich der Code im Ganzen hin aber: "Ihre Nachricht zu lang. Bitte kürzen Sie die Nachricht." (sic)

Ciao
D.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Kontextmenü im AxWebBrowser1.809Novatlan11.04.04 14:00
Re: Kontextmenü im AxWebBrowser995Novatlan16.04.04 06:55
Re: Kontextmenü im AxWebBrowser1.044Benjamin@vb16.04.04 09:20
Kontextmenü im AxWebBrowser - Lösungsansatz1.202Drapondur16.04.04 17:53
Danke!961Novatlan16.04.04 19:29
Kontextmenü im WebBrowser Kommando zurück 11.129Drapondur16.04.04 21:06
Kontextmenü im WebBrowser Kommando zurück 2945Drapondur16.04.04 21:15
Re: Kontextmenü im WebBrowser Kommando zurück 2918Novatlan17.04.04 12:29
Re: Kontextmenü im WebBrowser Kommando zurück 2939Drapondur17.04.04 15:08
Re: Kontextmenü im WebBrowser Kommando zurück 2919Novatlan17.04.04 18:54
Re: Kontextmenü im WebBrowser Kommando zurück 2873Drapondur17.04.04 19:57
Re: Kontextmenü im WebBrowser Kommando zurück 2896Novatlan18.04.04 07:58
Re: Kontextmenü im AxWebBrowser - Lösungsansatz 974ModeratorDaveS16.04.04 19:42
Re: Kontextmenü im AxWebBrowser898Novatlan03.05.04 20:03
AxWebbrowser - Seite zu Favoriten hinzufügen881Drapondur04.05.04 00:51
Re: AxWebbrowser - Seite zu Favoriten hinzufügen921Novatlan04.05.04 15:52
Re: AxWebbrowser - Seite zu Favoriten hinzufügen923Benjamin@vb04.05.04 16:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel