等幅フォント以外の文字切れ対応

・関数


''' <summary>
''' 指定幅分の文字列を取得
''' </summary>
''' <param name="intWidth">表示幅(px)</param>
''' <param name="strTarget">表示文字列</param>
''' <param name="fontTarget">表示フォント</param>
Private Function getStrFitWidth(ByVal intWidth As Integer,
                                ByVal strTarget As String,
                                ByRef fontTarget As Drawing.Font) As String

    Dim result As String = ""

    Try

        For i = 0 To strTarget.Length - 1

            Dim text As String = strTarget(i)

            If Not String.IsNullOrEmpty(text) Then

                Dim size As Drawing.SizeF = New Drawing.SizeF(Integer.MaxValue, Integer.MaxValue)

                Dim bmap = New Drawing.Bitmap(1000, 100)
                Using g As Drawing.Graphics = Drawing.Graphics.FromImage(bmap)
                    size = g.MeasureString(result & text, fontTarget)
                End Using

                If size.Width > intWidth Then
                    Exit For
                End If

                result &= text

            End If

        Next

    Catch ex As Exception

        Throw ex

    End Try

    Return result

End Function

1000×100のビットマップに1文字ずつ描いていきます。
MeasureStringでサイズ取得し、
指定幅を超えないよう文字を詰め込んで返します。

表示形式をカンマ表示などに変える場合は、
MeasureStringでStringFormatを指定して対応出来ます。

・フォント設定

Dim fName As String = "メイリオ"
Dim fSize As Single = 14
Dim fStyle As Drawing.FontStyle = Drawing.FontStyle.Regular
Dim fGraphicsUnit As Drawing.GraphicsUnit = Drawing.GraphicsUnit.Pixel
Dim fontTarget As Drawing.Font = New Drawing.Font(fName, fSize, fStyle, fGraphicsUnit)

FontStyleで太字など設定
GraphicsUnitでピクセル、ポイント設定

等幅フォントならバイト数で文字切れ対応出来るが、
等幅フォント以外は対応出来ないのでこちらを使用(=゚ω゚)ノ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です