Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MeasureString проблема

45K
05 января 2009 года
Scarabey
1 / / 05.01.2009
Привет форумчане!
Есть небольшая проблема с MeasureString, собственно она неверно определяет кол-во символов которое войдут в прямоугольник, если в конце есть пробелы.

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


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

Вот пример кода:
[vb]
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
[/vb]

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