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

Как сделать буквы разного цвета?


brunnengi

Вопрос

Опубликовано

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

 

Появилась задача сделать надписи так, что бы цвет букв в одном слове был разный, как на картинке например

19997_colored_text.png

Но так и не нашел решения. Делать слова по одной букве тоже не вариант. 

  • Как поступить, какой есть выход?
  • Может кто то уже делал и есть наработки?

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

  • 0
  • Администраторы
Опубликовано

Добрый вечер,

 

Такую надпись можно решить несколькими способами в зависимости от дополнительных условий:

  • Будет ли меняться текст надписи или нет?

В зависимости от этого есть четыре решения:

 

I. Текст надписи не допускает изменений

В этом случае проще всего сделать картинку с этим текстом и использовать ее в вашем приложении. Где нужно отобразить, использовать TImage.

 

II. Текст надписи может изменяться

Тут два решения:

1. Используем набор TText или TLabel. Для отображения групп последовательных символов одного цвета используем отдельный контрол TLabel или TText. Каждую группу раскрашиваем требуемым образом через настройки контролов.

На скриншотах ниже, я использовал контейнер TLayout и складываю туда несколько объектов TText с выравниванием по левому краю.

post-1-0-18347500-1395762251.pngpost-1-0-26711800-1395762251.png

2. Рисовать надпись вручную с использование TTextLayout. Этот способ сложнее, но зато универсальнее и эффективнее. Используя TTextLayout по очереди отрисовываем все буквы с нужными цветами и параметрами.

3. На основе решения 2 в этой части, сделать свой компонент.

  • 0
Опубликовано

Текст будет меняться, в течении всего времени использования программы.

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

Но вы, наверное, так же как и я, заметили, что между буквами не одинаковое расстояние, что конечно сильно бросается в глаза.

 

Вариант номер два звучит отлично. Я бы хотел использовать его.

Но работа демо по TTextLayout оказалась крайне не стабильна.

Я запускаю из под Windows 8. 

Что бы само приложение не "покрывалось" артефактами (из-за optimus'а), я ставлю FMX.Types.GlobalUseDirect2D := false;

Но при добавление атрибутов ничего не меняется (да и в чистом виде в демо ничего не происходит).

Если же не много поиграться с Global, то можно добиться того, что шрифт будет менять на жирный. Цвет категорически менять не хочет.

 

Как добиться чтобы Демо работала, на Windows 8?

Может надо еще какие нибудь глобальные переменные изменить?

  • 0
  • Администраторы
Опубликовано

Плыть в направлении использования TTextLayout. При отключении Direct2D канвы, включается по дефолту GDI+, в которой нету поддержки атрибутов. О чем указано в официальной документации.

 

Однако, вы можете применять TTextLaoyut не в целом ко всему текстом с атрибутами, а к частям, имеющим одинаковый цвет и стиль. То есть получаете размеры каждой части в заданных настройках текста, а затем по очереди выводи эти части.

  • 0
Опубликовано

Плыть в направлении использования TTextLayout. При отключении Direct2D канвы, включается по дефолту GDI+, в которой нету поддержки атрибутов. О чем указано в официальной документации.

 

Однако, вы можете применять TTextLaoyut не в целом ко всему текстом с атрибутами, а к частям, имеющим одинаковый цвет и стиль. То есть получаете размеры каждой части в заданных настройках текста, а затем по очереди выводи эти части.

Мне кажется есть другой вариант. Delphi ведь написан в Delphi. И собственно редактор кода умеет выводить текст разного цвета и стиля написания. Если я правильно понял - это "TEditControl". Почему нельзя вынести данный контрол на всеобщее использование?

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить на вопрос...

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

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

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

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

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

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