vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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 WebBrowser Kommando zurück 1 
Autor: Drapondur
Datum: 16.04.04 21:06

Hallo,

ich habe bemerkt, dass die Lösung so nicht richtig funktioniert. Z.B. kann man keinen Text im Control mehr selektieren.
Ich habe zwar versucht alle Document-Events zu implementieren, aber danach konnte man immer noch keinen Text selektieren.
Deswegen habe ich auf eine Lösung zurückgegriffen, die ich unter http://www.dotnetforums.net/t69218-20-2.html gefunden habe. (ca in der Mitte der Seite der Beitrag von vsdotnetguy, in dem man die Datei vbrevised.zip herunterladen) kann.

Ich habe im letzten Posting diesen Weg nicht beschritten, da ich ehrlich gesagt nicht verstehe, warum und wie das funktioniert.

Da in der dortigen Lösung in der Form-Klasse die mshtml.HTMLDocumentEvents2 implementiert werden, muss man alle Events auch in der Klasse unterbringen, was den Code, so finde ich, ziemlich aufbläht. In der Regel interessiert man sich ja nur für einige wenige Ereignisse.

Deswegen habe ich den Code ausgelagert in eine Klasse, die ich DocumentEventRouter genannt habe. Die Klasse implementiert einerseits die mshtml.HTMLDocumentEvents2, legt aber andererseits nur solche Events offen, die ich auch wirklich haben will.

Den Code dafür poste ich separat in einem weiteren Beitrag. Um ihn zu verwenden muss man analog zu dem oben erwähnten Beispiel vorgehen, also in der Form-Klasse System.Runtime.InteropServices implementieren.

Was die Sache mit dem Kopieren in die Zwischenablage angeht, so geht das ganz einfach mit myDoc.execCommand("Copy"), wobei myDoc ein HTMLDocumentClass-Object ist

Zur Verwendung des DocumentEventRouter
In der Dispose-Methode der Form schreibt man:
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
                If cookie <> -1 Then
                    icp.Unadvise(cookie)
                Else
                    cookie = -1
                End If
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
Im Deklarationsbereich deklariert man:
Private myDoc As mshtml.HTMLDocumentClass 'WithEvents ist hier nicht mehr 
' vorhanden
    Private WithEvents DocEventRouter As DocumentEventRouter 'siehe zweites 
    ' Posting
    Private cookie As Integer = -1
    Private icp As UCOMIConnectionPoint
Ins DocumentComplete-Ereignis des Webbrowsers kommt dann:
Private Sub AxWebBrowser1_DocumentComplete( _
        ByVal sender As Object, _
        ByVal e As AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent) _
        Handles AxWebBrowser1.DocumentComplete
 
        myDoc = CType(AxWebBrowser1.Document, mshtml.HTMLDocumentClass)
        'Eventhandling aufheben
        If cookie <> -1 Then
            icp.Unadvise(cookie)
            cookie = -1
        Else
            cookie = -1
        End If
 
        DocEventRouter = New DocumentEventRouter()
        Dim icpc As UCOMIConnectionPointContainer = CType(myDoc, _
          UCOMIConnectionPointContainer)
        Dim g As New Guid("3050F613-98B5-11CF-BB82-00AA00BDCE0B")
        icpc.FindConnectionPoint(g, icp)
        icp.Advise(DocEventRouter, cookie)
 
    End Sub
Das Ereignis kann dann so behandelt werden:
Private Sub DocEventRouter_Doc_ContextMenu( _
        ByVal sender As Object, _
        ByVal e As BrowserDocumentEventArgs) _
        Handles DocEventRouter.Doc_ContextMenu
 
        '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(e.DocEventObject)
 
        'Nun das Kontextmenu anzeigen
        mnuBrowser.Show(AxWebBrowser1.Parent, pt)
 
        e.ReturnValue = False
    End Sub
Wie ich bereits erwähnte, verstehe ich die Grundlagen dieser Lösung selbst nicht richtig. Deswegen wollte ich sie ursprünglich auch nicht posten. Da ich aber nun mal den ersten Schritt, der ja in eine falsche Richtung ging, getan habe, schiebe ich das hier ohne Garantie auf 100%-ige Richtigkeit nach.
Aber in diesem Forum gibt es ja einige helle Köpfe und "diesen verdienten Männern, die mit der Gründlichkeit der Einsicht noch das Talent einer lichtvollen Darstellung (dessen ich mir eben nicht bewußt bin) so glücklich verbinden, überlasse ich meine in Ansehung der letzteren hin und wieder etwa noch mangelhafte Bearbeitung zu vollenden, denn widerlegt zu werden ist in diesem Falle keine Gefahr, wohl aber nicht verstanden zu werden." (I. Kant, Kritik der reinen Vernunft, B XLIII).
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Kontextmenü im AxWebBrowser1.810Novatlan11.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.130Drapondur16.04.04 21:06
Kontextmenü im WebBrowser Kommando zurück 2945Drapondur16.04.04 21:15
Re: Kontextmenü im WebBrowser Kommando zurück 2919Novatlan17.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