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

[TLabel] Какое назначение у Font, TextSettings и ResultingTextSettings.Font?


haword

Вопрос

XE7 upd1. Под андроидом в рантайме эти параметры разливаются. Это фича или баг? Просто уперся в вычисление высоты метки. Долго не мог понять почему не правильно вычисляется. Поковырявшись в параметре AutoSize понял что там данные о шрифте берутся из ResultingTextSettings.Font а не из Font. Если контрол загрузил стиль в котором размер шрифта отличается от стандартного по умолчанию то Font остается по умолчанию хотя размер шрифта выводимый контролом соответствует загруженному из стиля как я понял. Если это так то это не удобно. Так как по правильному параметры шрифта загруженные из стиля должны отображаться в Font когда стиль загружен или те которые были установлены на самом контроле вручную. Короче реальный размер и название шрифта. Или я что то не понимаю и ошибся где то? 

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

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

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

Добрый день,

 

Есть четыре типа настроек текста:

  1. DefaultTextSettings. Это настройки текста по умолчанию.
  2. TextSettings - Это настройки текста, которые задает пользователь.
  3. StyledSettings - какие настройки текста брать из стиля, а какие из TextSettings.
  4. ResultTextSettings - это результирующие настройки текста с учетом значения StyledSettings.

Поэтому, если вы хотите получить итоговые настройки, то используйте ResultTextSettings. Они вычисляются автоматически на основании DefaultTextSettings, TextSettings и StyledSettings.

 

P.S. Название шрифта по умолчанию присваивается в DefaultTextSettings.

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

Думаю логично было бы присвоить TLabel.Font значение параметра TLabel.ResultingTextSettings.Font в рантайме что бы TLabel.Font всегда указывал на актуальный шрифт и его размеры используемые для показа текста. И не очень логично оставлять там не актуальные значения заданные в дезайнтайме которые изменились стилем после запуска программы, потому что это приводит к ошибкам если человек не в курсе таких хитросплетений.  

Ссылка на комментарий
  • 0
  • Администраторы

Нет, вы не правы. Два простых примера:

  1. При использовании дизайнера, вы можете переключать стили в дизайн тайме (верхний выпадающий список на дизайнером формы). В этом случае, при вашем подходе, если вы меняли вручную Font, у вас слетят ваши настройки, так как новый стиль поменяет размер шрифта. Поэтому важно, сохранять по умолчанию значение (то что из стиля и диктуется самой платформой) и значение выставленное пользователем вручную.
  2. Второе следствие первого - при переключении стиля в рантайме, вы опять же потеряете ваши настройки текста и обратно не сможете вернуть их.

P.S. Это не VCL, поэтому нужно понять и взять это, как основу нового фреймворка. Плюс на форуме уже было пояснение этого.

Ссылка на комментарий
  • 0
  • Администраторы

Да, все правильно. Это как раз потому, что все настройки текста хранятся по отдельности (по умолчанию, пользовательские, и конечные). И при сбрасывании и установки галок в StyledSettings настройки восстанавливаются.

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

Нет, вы не правы. Два простых примера:

  1. При использовании дизайнера, вы можете переключать стили в дизайн тайме (верхний выпадающий список на дизайнером формы). В этом случае, при вашем подходе, если вы меняли вручную Font, у вас слетят ваши настройки, так как новый стиль поменяет размер шрифта. Поэтому важно, сохранять по умолчанию значение (то что из стиля и диктуется самой платформой) и значение выставленное пользователем вручную.
  2. Второе следствие первого - при переключении стиля в рантайме, вы опять же потеряете ваши настройки текста и обратно не сможете вернуть их.

P.S. Это не VCL, поэтому нужно понять и взять это, как основу нового фреймворка. Плюс на форуме уже было пояснение этого.

 

У нас же есть TextSettings которые задает пользователь. Есть StyledSettings которые задает какие настройки брать со стиля. И есть Font который указывает на РЕАЛЬНЫЙ размер и название шрифта в зависимости от настроек. В дизайнере Font показывает настройки заданные мною в ручную, так как о стилях мы ничего еще не знаем. А в рантайме же он должен указывать на ResultTextSettings, то есть шрифт которые реально отображается. А так как заданные параметры в дизайнере хранятся в TextSettings то они не сотрутся а будут там хранится и при изменении параметров в StyledSettings шрифт будет показан от туда. То есть параметр Font это не структура с хранением данных а лишь указатель на используемые настройки. И что будем иметь в итоге. В дизайнере можно менять хоть заменяйся и данные будут сохраняться в TextSettings. Но во время работы приложения будет указывать на ResultTextSettings отображая реальные параметры отображения текста. А ResultTextSettings в зависимости уже от StyledSettings будет брать данные или со стиля или с TextSettings. Плюсы такого подхода то что во время работы приложения можно получить реально отображенный шрифт и его размер через Font компонента. 

 

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

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

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

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

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

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

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

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

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

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

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

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