Frage zu MSHTML-Objekten

30/12/2010 - 01:57 von Paul Pierot | Report spam
Hallo,

ich komme mit dem MSHTML-DOM nicht weiter.

Gegeben:
WebBrowser1
Verweis auf Microsoft HTML Object Library

' Deklarationsteil:
Private WithEvents objDoc As MSHTML.HTMLDocument

' Code:
Private Sub WebBrowser1_DocumentComplete()
Set objDoc = Me.WebBrowser1.Document
' Zum Bearbeiten wechsle ich den Modus:
WebBrowser1.Document.designMode = "On"
End Sub

' Ich will im Ereignis objDoc_oncontextmenu(), gerne
' das zugehörige Tagelement eines ausgewàhlten Bereichs
' herausfinden und ggf. manipulieren. Mein Frage am Beispiel:
Private Function objDoc_oncontextmenu()
Dim selHTML
' gibt den ausgewàhlten Bereich als HTML-Quellcode zurück:
selHTML = objDoc.selection.createRange.htmlText

' Nehmen wir an, der Quellcode der Browserseite enthàlt
' "<P>Das ist ein <strong>fetter Text</strong>.</P>"
' Sagen wir, ich habe im Fenster "ein fetter" ausgewàhlt,
' dann steht in selHTML "ein <strong>fetter</strong>"
' Wie prüfe ich auf 'strong' und wie komme ich an das
' übergeordnete Objekt 'P'?
' ...

End Function

Mir ist klar, ich kann ja in objDoc beliebige Tags leicht
identifizieren, aber das nützt mir nichts, da ich ja nur den
selection-Bereich behandeln will.

Weiter bin ich mit der MSDN nicht gekommen, da nirgends Bsp'e dabei
waren. Hier der Link:
<http://msdn.microsoft.com/en-us/library/ms533050(v=VS.85).aspx>


Für Beispiele Tipps oder Lösungen dazu bedanke ich mich schon mal.
 

Lesen sie die antworten

#1 Frank Müller
31/12/2010 - 05:28 | Warnen spam
Hallo Paul,

' Nehmen wir an, der Quellcode der Browserseite enthàlt
' "<P>Das ist ein <strong>fetter Text</strong>.</P>"
' Sagen wir, ich habe im Fenster "ein fetter" ausgewàhlt,
' dann steht in selHTML "ein <strong>fetter</strong>"
' Wie prüfe ich auf 'strong' und wie komme ich an das
' übergeordnete Objekt 'P'?
' ...



Du hast da einen Gedankenfehler, da deine Auswahl sowohl Teile
des über- als auch untergeordneten Elements enthàlt.

Dein <P> ist in diesem Beispiel ja nicht übergeordnet, da es
zur Auswahl gehört. (nàmlich das "ein" von "Das ist ein")
Übergeordnet von der Auswahl wàre evtl. <Body> oder
was auch immer in deinem Quelltext steht.

Mir ist klar, ich kann ja in objDoc beliebige Tags leicht
identifizieren, aber das nützt mir nichts, da ich ja nur den
selection-Bereich behandeln will.



Eben, genau das ist dein Problem wenn die Auswahl
halt nicht genau dem einen Tags entspricht.
Wenn die Auswahl über mehrere Tags geht kann
das nicht funktionieren.

Dieses "Problem" hast du doch auch bei jeder
beliebigen Textverarbeitung. Schreibe dein
Beispiel doch mal in Word, du wirst sehen, dass
die Schaltflàche für "Fett" da ausgegraut ist, du
sie aber dennoch anklicken kannst. Dann aber ist
der gesamte Selection-Bereich davon betroffen.

Wenn dau das wirklich analysieren möchtest,
(warum genau, was beabsichtigst du?), dann
kannst du nur hin gehen und den reinen Quelltext
Zeichen für Zeichen zu durchsuchen und zwar in
beiden Richtungen. Das ist machbar, aber
wie gesagt, eigentlich unnötog, da gemichste
Auswahlen durchaus üblich sind und der User
von jeder Textverarbeitung her das Verhalten kennt.

Gruß, und guten Rutsch ins neue Jahr,
Frank

Ähnliche fragen