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

Почему у меня для TLabel неправильно вычисляется размер метки при использовании AutoSize?


estra

Вопрос

На форме 2 метки:

 

6482818.jpg

 

Верхняя - FactoryIDCaption (Заводской №)

Нижняя - FactoryIDValue (90408223)

 

Нужно чтобы вторая строка (со значением параметра) располагалась после первой (с наименованием параметра) вне зависимости от длины текста в первой метке. У первой метки значение свойства AutoSize = True. И есть такой код

FactoryIDValue.Position.X := FactoryIDCaption.Position.X + FactoryIDCaption.Width;

По идее начало второй метки должно совпадать с концом первой метки, но на практике это не так. Где я ошибся и как эту ошибку исправить?

 

P.S.

Речь идет про Android, на Windows все работает правильно.

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

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

  • 0

В какой момент идет присваивание новой позиции для FactoryIDValue?

 

В TabControl1.OnChange, после создания приложения. К этому моменту все контролы уже созданы и инициализированы.

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

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

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

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

 

Я не использую функции расчета длины текста как таковые (TextWidth или MeasureText), я оперирую свойствами компонентов, при чем после загрузки приложения.

FactoryIDValue.Position.X := FactoryIDCaption.Position.X + FactoryIDCaption.Width;

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

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

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

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

Как я правильно заметил, в вашем случае не был загружен стиль ваших меток. По этому вы обращались к размерам, вычисленным для настроек текста по умолчанию. А после загрузки стиля, вы уже не обновляли позицию. 

 

На Windows настройки текста по умолчанию совпадают с настройками текста в стиле. Поэтому работает так, как вы и полагаете.

 

Решения

  1. Делать перерасчет позиции в OnApplyStyleLookup или OnResize у TLabel.
  2. Принудительно загрузить стиль:
    NeedApplyStyleLookup;
    ApplyStyleLookup;
    
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...