Перейти к содержанию
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 эмодзи.

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

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

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

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