C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: WebBrowserの文字サイズと文字の大きさについて


(過去ログ 103 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■61614 / inTopicNo.1)  WebBrowserの文字サイズと文字の大きさについて
  
□投稿者/ スネオ (1回)-(2011/08/23(Tue) 11:25:34)

分類:[VB.NET/VB2005 以降] 

VB2008でWebBrowserを使用して文章を表示するプログラムを作成していますが、
WebBrowserの幅を、原則1行全角36文字で表示できるようにしたいです。
(文章の途中でフォント変更等の装飾等がある場合は、例外として上記にごだわりません。)
WebBrowserに表示される文章のフォントはMSゴシックで、例えば以下のようなものを想定しています。

<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=shift_jis">
<TITLE>TEST</TITLE>
<STYLE type="text/css">
<!--
body{margin:0px;padding:0px;font-family:"MS ゴシック";}
-->
</STYLE>
</HEAD>
<BODY style="font-size : 12pt;">
亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜
</BODY>
</HTML>

色々と調べたところ、GraphicsにはMeasureStringというメソッドがあり、その文字を描画した時のサイズが分かるとのことで
早速試してみました。

Dim strTest As String = "亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜"
Dim sizF As SizeF
Dim fnt As New Font("MS ゴシック", _
12.0!, _
System.Drawing.FontStyle.Regular, _
System.Drawing.GraphicsUnit.Point, _
CType(128, Byte))
Using bmp As New Bitmap(1000, 100)
Using g As Graphics = Graphics.FromImage(bmp)
sizF = g.MeasureString(strTest, fnt, New SizeF(bmp.Width, bmp.Height))
End Using
End Using

Dim intWidth As Integer = System.Math.Ceiling(sizF.Width) '描画文字列の幅

しかし、この方法で得られた描画文字列の幅と、WebBrowser上に表示される同じ文字列の幅とを比較すると、
WebBrowser上に表示される文字列の幅の方が狭いようです。
(MeasureStringで計算すると幅598ピクセルなのに対し、WebBrowser上に表示される同じ文字列の幅が580ピクセル程度でした。)
両者の描画イメージを比較すると、文字のサイズは同じようですが、文字ピッチに違いがあるようです。
文字ピッチを考慮して、WebBrowser上での文字列の幅を計算するにはどのようにすればいいでしょうか?
お知恵をお貸しください。

引用返信 編集キー/
■61618 / inTopicNo.2)  Re[1]: WebBrowserの文字サイズと文字の大きさについて
□投稿者/ todo (162回)-(2011/08/23(Tue) 13:31:54)
HtmlElement.OffsetRectangle から取得する

-- html --
<span id='span1'>亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜</span>

-- C# --
HtmlElement span1 = webBrowser1.Document.GetElementById("span1");
MessageBox.Show("width=" + span1.OffsetRectangle.Width);
引用返信 編集キー/
■61620 / inTopicNo.3)  Re[2]: WebBrowserの文字サイズと文字の大きさについて
□投稿者/ スネオ (2回)-(2011/08/23(Tue) 17:01:56)
No61618 (todo さん) に返信

todoさん、ご回答ありがとうございます。

> HtmlElement.OffsetRectangle から取得する
>
> -- html --
> <span id='span1'>亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜亜</span>
>
> -- C# --
> HtmlElement span1 = webBrowser1.Document.GetElementById("span1");
> MessageBox.Show("width=" + span1.OffsetRectangle.Width);

WORK用のWebBrowserを用意し、上記のようにspanタグで囲んだテキストをDocumentTextプロパティに設定し、
WebBrowser読み込み完了後に、上記のようにspanタグのHtmlElementのOffsetRectangle.Widthを参照したところ、
希望通りの幅を得ることができました。
(ただし、spanタグの幅が折り返されないように、WebBrowserのWidthをあらかじめ十分確保するなどの工夫が
必要であることを付け加えておきます。)

ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -