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

Как сделать вывод текста в верхнем/нижнем регистре для отображения математической степени или индекса?


Alex7wrt

Вопрос

Здравствуйте.

Интересует вопрос, каким образом выводить числа со степенями в TLabel или TText. Среди символов знаю только ² и ³. А мне нужна произвольная целочисленная степень, в том числе отрицательная.

Самый очевидный для меня вариант на данный момент - это сделать AutoSize=True у основного текста. Измерять его ширину, и после этого текста в нужной позиции по горизонтали и вертикали вставлять другой TText, у которого размер шрифта и позиция по вертикали определяются размером шрифта основного текста. Но такой способ мне представляется не удобным. Если меняется длина основного текста, то при AutoSize=True он может отобразиться не в строчку, а в колонку и к тому же его длина не всегда точно вычисляется. Прошу подсказать, может есть более простой вариант вывода чисел со степенями.

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

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

  • 0
  • Администраторы

Добрый день,

Пока, к сожалению, нету поддержки стиля верхнего и нижнего регистров для текста. Поэтому вместо жонглирования TText, я бы сделал свой компонент. В нем достаточно будет только определить метод Paint для отрисовки текста. Дальше просто:

  • TTextLayout используем для измерения размеров текста.
  • Потом согласно расчетам, просто выводим в нужные позиции текст.

Для вдохновения можно сделать по образу и подобию TText.

Расчет размеров текста:

 ATextLayout.BeginUpdate;
 try 
   ATextLayout.Text := Text; 
   ATextLayout.WordWrap := False; 
   ATextLayout.MaxSize := TSizeF.Create(1000, 1000); 
 finally 
   ATextLayout.EndUpdate; 
 end; 
 Result := ATextLayout.TextRect.Size;

Вывод текста:
либо так:

 AContext.Canvas.FillText(Bounds, Text, False, 1, [], TTextAlign.Leading);

Либо через TTextLayout:

ATextLayout.Render;

Вам остается только добавить логику по вычислению позиции верхнего или нижнего регистра относительно основного текста.

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

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

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

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

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

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

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

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

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

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

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