• 0
POV

Неверная ширина текста из .Canvas.TextWidth

Вопросы

Когда задал компоненте новый TextSettings функция TextWidth возвращает ширину текста для шрифта по умолчанию. Хотя отрисовывает с моими новыми настройками.

Отчего?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 0
39 минут назад, POV сказал:

Когда задал компоненте новый TextSettings функция TextWidth возвращает ширину текста для шрифта по умолчанию. Хотя отрисовывает с моими новыми настройками.

Отчего?

https://habrahabr.ru/post/317814/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Всё уже придумано за нас - у канвы есть MeasureText откуда код на хабре и скопирован.

Но и оно возвращает какую-то ересь. Платформа XE8.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

уже много раз обсуждалось, что TTextLayout нужно инициировать до функции, иначе она косячит при большом кол-ве текста

я делаю глобальную переменную и в блоке initialization создаю, ну и в finalization освобождаю. пока глюков не было

Berlin если что

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

А почему оно не инициализировано в родной библиотеке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, POV сказал:

А почему оно не инициализировано в родной библиотеке?

ну так там и косячит, незнаю почему они не пофиксят

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 08.02.2017 в 11:10, POV сказал:

Когда задал компоненте новый TextSettings функция TextWidth возвращает ширину текста для шрифта по умолчанию. Хотя отрисовывает с моими новыми настройками.

Отчего?

Оттого, что ширина текста определяется для шрифта и размера указанного в Canvas, а не для шрифта из компонента.

Например, в TLabel.TextSettings.Font  и в его TLabel.Canvas.Font размер шрифта будет разный (в Canvas он дефолтный - 12).

В FMX компонентах Canvas, кстати, общий и один и тот же - это Canvas формы.

Если в OnResize чего-либо, сделать так: 

  Label.Canvas.Font.Size := Label.Font.Size;
  или 
  Label.Canvas.Font.Assign(Label.Font); (чуть дольше)

  lRealWidth := Label.Canvas.TextWidth(Label.Text); 

То размер будет корректный.

Изменено пользователем ENERGY

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу