Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
Новости

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

Author: white H42776

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

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

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

ITextSettings

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

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

  • DefaultTextSettings: TTextSettings — умолчательные настройки текста. Для стилизованных контролов это значение устанавливается при загрузке стиля в методе ApplyStyle. Для не стилизованных это тоже самое что и TextSettings (в общем случае всё зависит от реализации конкретного класса, но для TText это так).
  • TextSettings: TTextSettings — настройки текста установленные вручную.
  • StyledSettings: TStyledSettings — это свойство указывает какие текстовые настройки берутся из стиля (см. DefaultTextSettings), а какие устанавливаются вручную (см. TextSettings). Вы можете использовать также две константы:
  • AllStyledSettings — используются все настройки из стиля
  • DefaultStyledSettings — используются некоторые настройки стиля. Это значение обычно задается по-умолчанию.

 

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



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

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

TTextSettings

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

Label1.TextSettings.FontColor := MyColor;

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

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

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

  • Equals — эта функция позволяет определить, различаются ли два экземпляра TTextSettings. Если значения всех свойств одинаковы, то возвращается True.
  • DoChanged — этот виртуальный метод вызывается в случае, если произошли какие-то изменения свойств. Вы можете перекрыть этот метод в наследниках и выполнять некоторые действия по обновлению внешнего вида компонента, анализируя свойства IsChanged и IsAdjustChanged. Но не следует вызывать этот метод непосредственно. Для принудительного обновления контрола используйтем метод Change.
  • Change — этот метод устанавливает свойство IsChanged в True, затем в случае, если экземпляр не находится в состоянии обновления вызывается метод DoChanged и сбрасываются свойства IsChanged и IsAdjustChanged.
  • BeginUpdate и EndUpdate — если вам необходимо изменить сразу несколько свойств, то не смысла после каждого изменения перерисовывать компонент. Чтобы этого избежать используйте такой, примерно, код:
  • IsChanged — это свойство принимает значение True, если изменилось любое свойство
  • IsAdjustChanged — это свойство принимает значение True, если изменилось свойство, которое может повлиять на геометрические размеры текста. Например изменения цвета ни как не может повлиять на размер текста, а размер шрифта — может.
  • Assign — этот виртуальный метод присваивает значения всех свойств указанного в качестве параметра экземпляра. Единственный параметр Source должен быть либо экземпляром TTextSettings, либо nil. Если nil, то все свойства принимают умолчательные значения. В конструкторе вызывается Assign(nil), если в наследнике требуется изменить умолчательные значения, перекройте этот метод.
  • AssignNoStyled — этот метод аналогичен Assign, но присваивает только некоторые свойства с учетом параметра StyledSettings.
  • Trimming — если свойство отлично от ttNone и текст не помещается в область перерисовки, то он будет сокращен и в конец видимой части будет добавлено три точки.
  • HorzAlign, VertAlign — выравнивание текста по горизонтали и вертикали.
  • WordWrap — ели это свойство имеет значение True, то текст может автоматически разделяться на несколько строк.
  • FontColor — цвет выводимого текста.
  • Font — шрифт используемый при выводе текста.
  • OnChanged — событие которое происходит при изменении свойств.

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

Похожие сообщения
Delphi

Учебник «Обучение мобильной разработке на Delphi».

C++Новости

Вышел второй пакет исправлений для RAD Studio 10.4

C++DelphiНовости

Установка и первые шаги для работы с 10.4 Sydney

C++

Переход на новый портал лицензирования и загрузки дистрибутивов Embarcadero

Leave a Reply

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

IN THE ARTICLES