DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowserコントロールから文字の現在のフォントサイズをとれる方法?

環境/言語:[VB.NET2010, MSHTML,Framework4.0]
分類:[.NET]

2011/10/21(Fri) 23:07:04 編集(投稿者)


色々お世話になっております。

vb.net2010とMSHTML(Framework4.0)を使いWYSIWYGのHTMLソフトを
開発中です。

デザインモードをONにして
formにつけたwebbrowser コントロールに文字を入力してフォントのサイズ(1〜7)を変えたりしますが
webbrowser1.documentTextを使っている場合は以下のCODEソースをWebBrowser1_DocumentCompletedに書いて使ってみると
webbrowser コントロールの上に入力した文字の上にマウスをクリックすると
(またはカーソルが置いてある)フォントサイズが取れることができまたが、
(ちなみにMS WORDみたいなことです。)

webbrowser1.documentTextではなくwebbrowser1.document.writeを使うと
WebBrowser1_DocumentCompletedイベントが発生しないため以下のCODEが
効かないので困っています。

webbrowser1.documentTextを使えばいいと思う方もいますが、事情により
使えません。かわりにwebbrowser1.document.writeを使っています。

簡単に言いますとWebBrowser1_DocumentCompletedイベントを使わずに
入力した文字の現在のフォントサイズをとれる方法がありますでしょうか?

助けて頂ければ嬉しいです。

//WebBrowser1_DocumentCompletedに使っているCODEはここから-----------------

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

If WebBrowser1.ReadyState = WebBrowserReadyState.Complete Then
WebBrowser1.Document.AttachEventHandler("onclick", AddressOf wb_click)
End If
End Sub


Sub wb_click(ByVal sender As Object, ByVal e As EventArgs)
Dim doc As MSHTML.IHTMLDocument2 = DirectCast(Me.WebBrowser1.Document.DomDocument, MSHTML.IHTMLDocument2)

cFontsize = 1
Dim mFontSize As String = Nothing

If doc IsNot Nothing AndAlso doc.selection IsNot Nothing Then
Dim range As MSHTML.IHTMLTxtRange = TryCast(doc.selection.createRange(), MSHTML.IHTMLTxtRange)
If range IsNot Nothing Then
Dim elem As MSHTML.IHTMLElement2 = TryCast(range.parentElement(), MSHTML.IHTMLElement2)

mFontSize = elem.currentStyle.fontSize.ToString()
If mFontSize = "14px" Then
fontSizeComboBox.Text = "3"
Else
fontSizeComboBox.Text = elem.currentStyle.fontSize.ToString()
End If
End If
End If
End Sub
----------------------------------------//ここまで
添付ファイル: si.jpg (42 KB)
2011/10/27(Thu) 02:39:34 編集(投稿者)

■No29278に返信(tamuraさんの記事)
> formにつけたwebbrowser コントロールに文字を入力してフォントのサイズ(1〜7)を変えたりしますが

1〜7 ということは、スタイルシートでサイズ指定しているのではなく、
"FontSize" コマンドを execCommand しているか、もしくは
あるいは <font size> タグを用いているのでしょうか?

スタイルシートの場合は currentStyle で取得することができますが、
font タグによるものなら、"FontSize" コマンドを queryCommandValue するのが
自然かと思います。ただしこの方法だと、<font size="5"> と <font size="+2"> の
区別はできません。±指定と区別したい場合は、IHTMLFontElement を辿って
size プロパティを調べてみてください。


> webbrowser1.documentTextを使えばいいと思う方もいますが、事情により
> 使えません。かわりにwebbrowser1.document.writeを使っています。
事情にもよりますが、write メソッドの代わりに、insertAdjacent 系メソッドや
execCommand 等による編集は使えないでしょうか。IE8 以降であれば、
WinEvents にて EVENT_OBJECT_REORDER のイベントも通知されるようですし。

DOBON.NET | プログラミング道 | プログラミング掲示板