Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как рассчитать Baseline для выводимого текста?


Кривяков Виталий

Вопрос

Добрый день!

Столкнулся с проблемой вывода текста разного размера по одной линии. Не получается использовать BaseLine доступную для Firemonkey. 

Baseline -   воображаемая прямая линия, проходящая по нижнему краю прямых знаков без учёта свисаний и нижних выносных элементов. В строке символы текста стоят на базовой линии, а нижние выносные элементы текста «свисают» с неё.

Из описанного выше ясно, что выводимые символы должны лежать на это линии, но в реале как то все некорректно выводится.

Сделал два примера VCL (черный фонт) и FireMonkey(черный полупрозрачный фонт), оказалось, что вывод текста осуществляется по разному, при одном и том же значении размера шрифта. Базовая линия в обоих примерах 356.

Совмещаем отображение символов: GlyphsEqual.png Символы совпали, но базовая линия смещена.

Совмещаем базовую линию: PosEqual.png Базовая линия совпала, как и верхний край контролов, а вот текст (серый) значительно ниже.

А теперь собственно вопрос вопрос, где ошибка? Как рассчитать базовую линию для FMX?

 

P.S.

Про attributes у TTextLayout знаю.

GlyphsEqual.PNG

PosEqual.PNG

BaseLine.rar

DancingGlyphs.PNG

Ссылка на комментарий

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

  • 0
В 20.01.2017 в 17:34, Кривяков Виталий сказал:

А теперь собственно вопрос вопрос, где ошибка? Как рассчитать базовую линию для FMX?

Проблема не в расчете базовой линии, а в том как рисуется текст на GDI+ и Direct2D. У шрифта есть еще свойство LineGap - это предлагаемое расстояние между строками. Как я понял, GDI+ не учитывает его при выводе первой строки, а Direct2D - учитывает. Т.е. при выводе текста на Direct2D он смещается на TTextMetric.tmExternalLeading.

Чтоб увидеть это - достаточно в Вашем примере поменять шрифт "Times New Roman" на какой-нибудь, где LineGap=0 (например "Tahoma", "Verdana" или "Segoe UI").

Ссылка на комментарий

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

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

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

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

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

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

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

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

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