Перейти к содержанию
  • Регистрация
  • 0
estra

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

Вопрос

На форме 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;
    

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От Ameta
      Доброе время суток. После создания/изменения (Edit Custom Style...) собственного стиля у Label1 (добавил в качестве фона прямоугольник) перестали обрабатываться события OnMouseMove, OnMouseDown и т.д. (Label1.HitTest:=True). До изменения стиля все работало. В чем причина? Спасибо за ответ...

    • От sviat9440
      Возникла вот такая непонятная ситуация: до этого момента я всегда считал что TLabel никак физически не может принять Tab Focus наравне с TRectangle и тому подобных. Судя по всему я ошибался. Ниже прилагаю скрин окна Tab Order, что там делает TLabel неясно. Ну да ладно. Вопрос в том как его оттуда убрать, чтобы он не жрал Tab Focus? Стандартных галочек TabStop и CanFocus в Tlabel нет.

      P.S. Я не помню чтобы я сталкивался с этой проблемой в предыдущих версиях RAD.
    • От sviat9440
      Почему в 10.1 цвет надписи тянется из стиля, хотя в StylledSettings галочка FontColor отключена?

    • От kidrock
      Всем привет. Как на мобилке для Делфи  сделать так, чтобы по клику на TLabel открывался браузер(не компонент) и, допустим, страница http://google.com?
    • От ra.eremeev
      Друзья, дошел до отчаяния!
       
      В моем приложении есть необходимость рассчитать высоту TListboxItem, в котором расположены компоненты TLabel.
      Расчет высоты производится на основании подсчета высоты компонента TLabel.
      Также, компоненты TLabel сами выстраиваются в столбец друг за другом (закончился один, отступ, выводим другой).
       
      Перерыл весь форум. Использовал все рекомендации:
      1. определял высоту текста в TLabel по канве (тема: http://fire-monkey.ru/topic/44-avtomaticheskii-perekhod-na-vtoruiu-stroku-tlabel/)
      2. принудительно загружал стили (тема: http://fire-monkey.ru/topic/726-pochemu-u-menia-dlia-tlabel-nepravilno-vychisliaetsia-raz/)
      3. опирался на свойства TLabel.Height.
       
      Что бы я ни делал, построить стабильный вывод компонентов не получается.
      Постоянно в самые непредсказуемые моменты компоненты либо расползаются, либо высота TListboxItem рассчитывается неверно.
       
      Самый стабильный результат дает третий способ. Но при первом выводе компонентов на экран, те, которые завязаны на расчет высоты TLable, расползаются; при последующих открытиях расчет работает стабильно. Думал, что стили не загружены, применял 2 способ, но тоже решения не дало
       
      Подскажите, пож-та, как получить реальную высоту текста в TLabel как при первом выводе компонентов на экран, так и при последующих?
       
      Также, не сочтите за наглость, но буду признателен за фрагмент кода, работающего при любых условиях для Listbox1.Height:=Label1.height+label2.Height+10
      Правда, веру в себя с этим выравниванием потерял
       

    • От Adm123
      Всем доброго дня!
      Подскажите, можно ли влепить TBannerAd в качестве child-а на panel, rectangle, layout? Вообще, хоть на что-то..? Никак не получается...
      Я, конечно, не совсем правильно сформулировал вопрос. Чайлдом-то баннер поставить можно, но вот позиционируется align-ом он все равно по главной форме. Как вот с этим бороться?
    • От Rusland
      Поставил в ряд 19шт Label. Фактически - это блоки цифр (10шт Label-цифры), разделенные точками (9шт Label-точки).
      Align у всех Right, стандартный шрифт Segoi UI, но размер поставил 12. Autosize у Label-цифр = True.
       
      При запуске у меня один Label-точка "убегает" вперед.
      Например я начинаю редактировать первую цифру и вместо '111' пишу '11', а затем вместо '11' обратно '111', то Label-точка стоящая за цифрой перемещается вперед! И так со всеми цифрами!
      На мой взгляд чудит autosize=true. 
      Но если я выставляю autosize=false, то на андроиде вместо цифр я вижу '...'  (в проекте и на картинке ниже видно два варианта)
       

       
      Помогите разобраться, как решить эту проблему?
       
      Вот тут сам проект https://yadi.sk/d/7Gc1KFqLmGehS
       
       
      PS. Delphi Seattle, Android 4.2.2, 4''
    • От Martifan
      Здравствуйте. У меня возникла проблема с TMultiView. После запуска программы на телефоне при первом открытии компонента, он подвисает и появляется медленно, но во все последующие вызовы этого компонента работает без задержки.   P.S. Когда использую анимацию появляется та-же самая проблема.   Заранее спасибо.
    • От Fritz10Comp
      Здравствуйте!
       
      При значениях шрифта больше 24 при сборке приложения под андроид на С++ Builder XE7 обрезаются буквы. Высота компонента вручную не регулируется...
       
      Скажите пожалуйста. Это неискореннимый недостаток или можно поиграться в настройках?
      Заранее спасибо!
  • Последние посетители   0 пользователей онлайн

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

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