Перейти к содержанию
  • Регистрация
  • 0
POV

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

Вопрос

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

Отчего?

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


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

Рекомендуемые сообщения

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

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

Отчего?

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

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


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

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

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

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


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

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

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

Berlin если что

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


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

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

×
×
  • Создать...