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

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

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

Re[5]: 文字列の伸縮描画法


(過去ログ 36 を表示中)

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

■18344 / inTopicNo.1)  文字列の伸縮描画法
  
□投稿者/ 鶏唐揚 (92回)-(2008/05/13(Tue) 15:06:01)

分類:[VB.NET/VB2005] 

[OS]WinXP
[VB]2005

毎度お世話になっておりますというかお騒がせしております。

今回は質問(というより確認?)です

PictureBoxに文字列を描画する際、幅や高さを指定して伸縮描画させたいのですが、
Graphics.DrawStringのオーバーロード見てってもそれらしいのはなく、
TextRenderer.DrawTextにはRect指定はあったのですが、クリッピングされてしまいました。
「VB2005 文字 描画」「.NET 文字列 引き伸ばし」等々、
検索しましたが有用な情報は出てきませんでした

なんかWinAPIに文字列を幅高さ指定して伸縮描画できるのが
あったような気がしますが、できればWinAPIを使わない方向で
技があれば伝授していただきたいと思います

以上よろしくお願いします
引用返信 編集キー/
■18345 / inTopicNo.2)  Re[1]: 文字列の伸縮描画法
□投稿者/ いしだ (112回)-(2008/05/13(Tue) 15:22:07)
こんにちは。
以下は参考になりませんかね?

.NETでのテキスト処理技法をマスターする
http://japan.internet.com/developer/20070522/print27.html
引用返信 編集キー/
■18347 / inTopicNo.3)  Re[2]: 文字列の伸縮描画法
□投稿者/ 鶏唐揚 (93回)-(2008/05/13(Tue) 15:44:06)
2008/05/13(Tue) 15:44:52 編集(投稿者)

No18345 (いしだ さん) に返信
> こんにちは。
> 以下は参考になりませんかね?
>
> .NETでのテキスト処理技法をマスターする
> http://japan.internet.com/developer/20070522/print27.html
なるほど、Graphicsの描画倍率設定をしてから文字描画ですか。
(よく考えればGraphicsは描画全般に関するオブジェクト…APIと同感覚で描画時指定のものを探していました^^;)

ピクセル単位の指定ができれば、と思ってましたが、あんまり時間もないので
文字列の長さと指定ピクセルで倍率計算してやろうと思います。

ありがとうございました。

#ピクセル指定できるぞ!という情報があればお願いします
解決済み
引用返信 編集キー/
■18356 / inTopicNo.4)  Re[3]: 文字列の伸縮描画法
□投稿者/ 鶏唐揚 (95回)-(2008/05/13(Tue) 17:40:18)
2008/05/13(Tue) 17:58:28 編集(投稿者)
'精度とか利便性とか拡張性とかはとりあえず無視して、
'Subプロシージャ作ってみました

Public Sub PrintText(ByVal DestPicture As PictureBox, ByVal PrintStr As String, ByVal TextFont As Font, _
                     ByVal PrintPos As Point, ByVal PrintSize As SizeF, ByVal FontColor As Blush)
Dim lcGrp As Graphic
Dim lcStrSize As SizeF
Dim lcRatioX As Single
Dim lcRatioY As Single
Dim lcStrFormat As StringFormat

    Try
        'PictureBoxのGraphics
        lcGrp = DestPicture.CreateGraphics
        lcGrp.ScaleTransform(1, 1)    '念のため1:1に戻す
        
        '空白も文字列サイズに含めるようフラグ設定
        lcStrFormat = New StringFormat
        lcStrFormat.FormatFlags = .FormatFlags Or StringFormatFlags.MeasureTrailingSpace
        
        '文字列の幅高さを取得
        lcStrSize = lcGrp.MeasureString(PrintStr, TextFont, DestPicture.Size, lcStrFormat)
        
        '比率の計算
        lcRatioX = PrintSize.Width / lcStrSize.Width
        lcRatioY = PrintSize.Height / lcStrSize.Height
        
        '描画
        lcGrp.ScaleTransform(lcRatioX, lcRatioY)
        lcGrp.DrawString(PrintStr, TextFont, FontColor, PrintPos.X, PrintPos.Y)
    Catch ex As Exception
        Throw ex
    Finally
        'lcGrp = Nothing
        'lcStrFormat = Nothing
    End Try
End Sub

'#Nothingしていいのかどうか迷った

解決済み
引用返信 編集キー/
■18370 / inTopicNo.5)  Re[4]: 文字列の伸縮描画法
□投稿者/ 中博俊 (1290回)-(2008/05/13(Tue) 20:19:17)
中博俊 さんの Web サイト
そもそもPictureBoxに直接描画してたらひどりさんにひどい目にあうぞ。(^^

引用返信 編集キー/
■18410 / inTopicNo.6)  Re[5]: 文字列の伸縮描画法
□投稿者/ 鶏唐揚 (97回)-(2008/05/14(Wed) 09:44:39)
No18370 (中博俊 さん) に返信
> そもそもPictureBoxに直接描画してたらひどりさんにひどい目にあうぞ。(^^
>
実はその後に別の問題によりPanelに置き換わったりしています(
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -