MeasureString - неверное определение кол-ва символов
От: Scarabey  
Дата: 05.01.09 04:09
Оценка:
Привет форумчане!
Есть небольшая проблема с MeasureString, собственно она неверно определяет кол-во символов которое войдут в прямоугольник, если в конце есть пробелы.

Пример:
Текст: "Мама мыла раму"
Область: "----------"
Функция вернет 10 символов


Пример:
Текст: "Мама мыла раму" <- между мыла и раму куча пробелов
Область: "----------"
Функция вернет 28 символов , т.е. войдут все пробелы, почему? Длинна прямоугольника не изменилась.

Вот пример кода:
  Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim StrFrm As StringFormat = StringFormat.GenericTypographic
        'Даже если раскоментировать, результат тот-же
        'StrFrm.FormatFlags = StringFormatFlags.NoClip Or StringFormatFlags.MeasureTrailingSpaces
        'StrFrm.Trimming = StringTrimming.Character
        
        'В этой переменной будет кол-во символов
        Dim Count As Integer = 0
        e.Graphics.MeasureString("мамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамамама", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
        Debug.Print("Текст-текст-текст: " & Count.ToString)

        e.Graphics.MeasureString("мама                                                                                                              мама", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
        Debug.Print("Текст-пробелы-текст: " & Count.ToString)

        e.Graphics.MeasureString("мама                                                                                                                  ", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
        Debug.Print("Текст-текст-пробелы: " & Count.ToString)

        e.Graphics.MeasureString("                                                                                                                  мама", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
        Debug.Print("пробелы-текст-текст: " & Count.ToString)

        e.Graphics.MeasureString("                                                  мамамама                                                            ", Me.Font, New SizeF(50, Me.Font.Height), StrFrm, Count, Nothing)
        Debug.Print("пробелы-текст-пробелы: " & Count.ToString)
    End Sub


И вот результаты из Debug:
Текст-текст-текст: 8 <- тут ясно он культурно по символам обрезал, вот столько должно влазить 8
Текст-пробелы-текст: 114 <- тут не вошло последнее слово мама, позно до него дошло, но уже лишних пробелов насчитал
Текст-текст-пробелы: 118 <- так-как пробелы идут до самого конца, он их все и посчитал
пробелы-текст-текст: 114 <- тут не вошло последнее слово мама, позно до него дошло, но уже лишних пробелов насчитал
пробелы-текст-пробелы: 50 <- тут только дойдя до текста по серединке он понял что переборщил на 40+ символов ))


05.01.09 22:46: Перенесено модератором из '.NET' — TK
measurestring пробелы проблема
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.