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 пробелы проблема
Re: MeasureString - неверное определение кол-ва символов
От: Scarabey  
Дата: 05.01.09 15:37
Оценка:
Народ не уж то не кто не сталкивался с такой проблемой???
Re: MeasureString - неверное определение кол-ва символов
От: Аноним  
Дата: 05.01.09 19:52
Оценка:
Здравствуйте, Scarabey, Вы писали:

S>Привет форумчане!

S>Есть небольшая проблема с MeasureString, собственно она неверно определяет кол-во символов которое войдут в прямоугольник, если в конце есть пробелы.

Ну — считает лишние пробелы... А проблема то в чем?
Re: MeasureString - неверное определение кол-ва символов
От: sonnesuchtige  
Дата: 08.01.09 01:50
Оценка:
Здравствуйте, Scarabey, Вы писали:

S>Привет форумчане!

S>Есть небольшая проблема с MeasureString, собственно она неверно определяет кол-во символов которое войдут в прямоугольник, если в конце есть пробелы.

попробуй MeasureCharacterRanges
Re: MeasureString - неверное определение кол-ва символов
От: muse Россия  
Дата: 08.01.09 12:02
Оценка:
Здравствуйте, Scarabey, Вы писали:

S>Есть небольшая проблема с MeasureString, собственно она неверно определяет кол-во символов которое войдут в прямоугольник, если в конце есть пробелы.


TextRenderer.MeasureText работает корректно. Используйте его
Люблю повеселиться, особенно пожрать
textrenderer measuretext measurestring
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.