Site icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Установка параметров текста в Fire Monkey 2

Author: white H42776

Среди незаметных, но полезных, на мой взгляд, нововведений в XE3 имеется интерфейс ITextSettings, который описан в модуле FMX.Types.

Часто нам надо изменить некоторые параметры выводимого текста для компонента, класс которого нам заранее неизвестен, например это может быть  TText, или TTextControl у которых есть свойства Color и FontColor. Раньше пришлось бы проверять тип экземпляра и выполнять приведение типов:

[crayon-676f2a5bef4c0494939658/]

Можно еще обращаться к публичным свойствам через RTTI, но как-то это меня печалит учитывая, что кроме цвета есть и другие свойства текста…

ITextSettings

Использование интерфейса существенно упростит задачу и сделает решение более универсальным.

[crayon-676f2a5bef4c8047586649/]

Вы можете получить значение интерфейсной переменной Settings разными способами и в случае успеха она будет иметь отличное от nil значение. Что представляет собой Instance в данном случае не важно, главное, что полученный интерфейс содержит следующие свойства:

[crayon-676f2a5bef4ca012460884/]

 

Важно не забывать, что меняя, например, TextSettings.FontColor, фактическое изменение внешнего вида произойдет, если StyledSettings не содержит значения TStyledSetting.ssFontColor. Наследники TTextControl, такие как TLabel позволяют редактировать свойство StyledSettings в инспекторе объектов. При изменении цвета на значение отличное от умолчательного, свойство ssFontColor автоматически примет значение False. Но это происходит только в Design Time.



Вот часть кода, которая выполняется при изменении свойства влияющего на внешний вид текста:

[crayon-676f2a5bef4ce647026839/]

Как можно видеть, для внутреннего текстового объекта FTextObject сначала присваиваются все умолчательные значения, затем некоторые значения установленные вручную, при этом учитывается свойство StyledSettings.

TTextSettings

Для настройки внешнего вида текста создан класс TTextSettings, унаследованный от TPersistent. Наследники TTextControl имеют свойство TextSettings в секции public. Т.е. если заранее известен тип компонента, то получать интерфейс не обязательно:

Label1.TextSettings.FontColor := MyColor;

Публичное свойство TLabel.FontColor, на самом деле «поднимает» аналогичное свойство от TextSettings.

Замечу, что не все контролы, в полной мере, поддерживают все свойства TTextSettings, например TButton не может правильно менять цвет текста (т.к. он меняется при наведении мыши), поэтому в секции published объявлены только поддерживаемые свойства, а TextSettings оставлено в public. Однако создавая своих наследников TTextControl вы можете поместить это свойство в секцию published и изменять его в инспекторе объектов.

Рассмотрим кратко что содержит данный класс

[crayon-676f2a5bef4d0491195896/]
Exit mobile version