2009年12月18日金曜日

なんだって!!!

.netで色つきDrawStringとして、TextureBrushとMeasureCharacterRangeを使って版画形式(=プリントごっこ形式)で実現しようと思っていたけど、文字の左や上の部分が少し欠けるときがある。
さっぱりわからなかったが、
http://www.microsoft.com/japan/msdn/archive/community/gdn/ShowPost-24735.htm
や、

http://dobon.net/vb/dotnet/graphics/measurestring.htmlをみると、思わぬことが、、、
>>文字列を描画したときの大きさを取得するには、Graphics.MeasureStringメソッドを使います。しかしMeasureStringメソッドはグリフの突出に備えて前後に余白を入れますので、Graphics.DrawStringメソッドで文字列を描画したとき、これよりも通常は狭い範囲に表示されます。

なんだってーーー。文字の大きさをとろうとしただけで、表示位置が変わるの???
MeasureStringと描画に関係しているところは、、、


stringFormat.SetMeasurableCharacterRanges(characterRanges);


http://msdn.microsoft.com/ja-jp/library/system.drawing.stringformat.setmeasurablecharacterranges.aspx
これの例外条件が問題になってくるかも。


だけど、、マイクロソフトの掲示板の方、

exsample(e.Graphics, "WWWWWWWWWWWWWWW", new Font("Century", 32));
とやると、やっぱりずれる。難しいです。

2009年12月16日水曜日

DrawString

で、色がえをしようとして、版画(=プリントごっこ)のように、TextureBrushを使って、文字を書いてみたけどなんか文字がにじむ。
MeasureCharacterRangesを使って、インクを置く場所に、FillRectangleを使ってみたけど、、、
さらに工夫が居るのかな?

FillRectangleの長方形指定の部分に、RectangleFを指定しているが、これを、上下左右に0.5ドットずつ拡張してみようか?それとも
DrawRectangleで、幅1のペンで塗ってみようか?
ひょっとしたら、FillRectangleに指定したものが、RectangleFでは無くRectangleF.Round()したものだったりしたおちだとうれしいんだけど。

2009年12月13日日曜日

誤訳フィードバック

以下の機能を使ってコードを書いていたら、OverflowExceptionが出てしまいました。
http://msdn.microsoft.com/ja-jp/library/system.drawing.stringformat.setmeasurablecharacterranges(VS.80).aspx#
で、MSDNの解説を見ると、すごい制限がありました。まさか32文字以上を囲むとOverflowExceptionが出るのか?とどきどきしましたが、そうはならず。。。。
結局いつものMSDN誤訳じゃないかと。

で、画面の上の星マークをクリックして、こんな感じでフィードバックしてみました。
”OverflowExceptionの条件が間違っています。
「32 文字を超える範囲が設定されています。」となっていますが、英語版の「32個を超えるCharacterRangeが設定されています。」が正しいと思います。”

前、SQL Server 2005の解説で外部キー波及の解説間違いにフィードバックしたときには知らないうちに修正されていたので、今度も知らないうちに変わってくれるといいんだけれど。。。どうなることやら。