パスワードを忘れた? アカウント作成
497414 journal

kibayasiの日記: 宛 MSのフォントまわり通 2

日記 by kibayasi

VB2005の印刷まわりをやってるわけだが、
これがまた謎でして・・・

==============================

'PrintDocument1_PrintPageの中身
'フォント
Dim f As Font
f = New Font("MS 明朝", 12)

'1文字の幅を取得
Dim dx As Integer
dx = e.Graphics.MeasureString("0", f).Width

==============================

この時のdxは14を返すんだけど、
"0"の部分の文字列を増やすと摩訶不思議現象になる。

"01"の場合は、23
"012"の場合は、31
"0123"の場合は、40
"01234"の場合は、48
である。
プロポーショナルのフォントにしてるわけではないんだけど、
1文字の幅と思って使うと変になるのだ。
当然、文字と文字の間のスペースってのがあるんだろうけど、
それなら増えてもよさそうなもんだが、
逆に減っていくのだ。
だから、"0123456789"と10文字にすると、91を返す
もし1文字の幅が14だとして計算すると、
10文字だと140になると思うもんだけど、そうならない。
法則的なものを感じるとすると、
+9、+8、+9、+8という増え方をしてるということか。。
14+9+8+9+8+9+8+9+8+9=91
正直 意味がわからん。。
だれか納得のいく説明をしてほしい。
俺の脳みそじゃ無理。(-_-;)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2007年04月09日 13時49分 (#1139665)
    Graphics.MeasureString メソッド (String, Font) [microsoft.com]より"解説"から引用
    MeasureString メソッドは独立した文字列で使用するようにデザインされており、グリフの突出に対応するための少量の余白を文字列の前後に含めます。また、DrawString メソッドはグリフのポイントを調整して表示品質を最適化するため、MeasureString で報告されるよりも狭い範囲に文字列が表示される可能性があります。(たとえば、書式設定されたテキストを実装するときに) レイアウト内の隣接する文字列に適したメトリックを取得するには、MeasureCharacterRanges メソッドを使用するか、または StringFormat を受け取る MeasureString メソッドのうちの 1 つを使用し、GenericTypographic を渡します。また、Graphics の TextRenderingHint が AntiAlias である必要があります。
    最初の1文字に余裕が見込んであるんだな。きっと。
typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...