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

AutoSize работает иначе под Tokyo!


Вадим Смоленский

Вопрос

Перейдя с Берлина на Токио, столкнулся с неприятным феноменом. Раньше, выводя на экран форму с обилием TLabel, которые нужно было заполнить текстом и выровнять, я спокойно ставил везде AutoSize=True, присваивал нужные значения полям Text, после чего ширина каждого TLabel принимала новое значение, и мой код их красиво выравнивал. Теперь же ширина не меняется до полной отрисовки на экране всего и вся. Соответственно, на этапе выравнивания код оперирует со значениями ширины, которые были еще на этапе дизайна. Как следствие - всё наперекосяк! Что делать?

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

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

  • 0

а этап выравнивания это когда?

У меня так: есть некий фрейм, до поры невидимый. По определенному событию (щелчок по кнопке) все TLabel на фрейме заполняются текстом и свойство Visible фрейма переводится в True. В Tokyo получается так, что пока фрейм невидим, размеры TLabel не меняются, невзирая на AutoSize.

Какой здесь может быть другой момент для расчетов?

Ссылка на комментарий
  • 0
16 минут назад, Вадим Смоленский сказал:

а этап выравнивания это когда?

У меня так: есть некий фрейм, до поры невидимый. По определенному событию (щелчок по кнопке) все TLabel на фрейме заполняются текстом и свойство Visible фрейма переводится в True. В Tokyo получается так, что пока фрейм невидим, размеры TLabel не меняются, невзирая на AutoSize.

Какой здесь может быть другой момент для расчетов?

для фрейма пробовал

procedure PreloadContent(const Control: TControl);
var
  I: Integer;
begin
  if Control is TStyledControl then
    TStyledControl(Control).ApplyStyleLookup;
  for I := 0 to Control.ControlsCount - 1 do
    PreloadContent(Control.Controls);
end;

 

Или каждый лейбл пересчитать кодом по ширине/высоте до отображения - есть процедурки соответствующие.

 

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

FREEFAR, спасибо, ApplyStyleLookup прекрасно помог!

(пробовал здесь поаккуратнее переписать ваш код, но скрипту почему-то не понравилось)

Изменено пользователем Вадим Смоленский
Ссылка на комментарий
  • 0
3 часа назад, Вадим Смоленский сказал:

а этап выравнивания это когда?

У меня так: есть некий фрейм, до поры невидимый. По определенному событию (щелчок по кнопке) все TLabel на фрейме заполняются текстом и свойство Visible фрейма переводится в True. В Tokyo получается так, что пока фрейм невидим, размеры TLabel не меняются, невзирая на AutoSize.

Какой здесь может быть другой момент для расчетов?

С таким сталкивался. Но в более сложных вариациях.. там даже свойство (объект внутри компонента) может быть не создан до первой отрисовки. Приходилось комбинации всяких мероприятий (в том числе Application.ProcessMessage) делать без обращением к компонентам.

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

Ну вообще для меня вот неочевидно, что размер невидимого компонента должен быть определен.

если у меня три панели и две из них невидимы, то это сильно влияет на размеры и положение третьей

Ссылка на комментарий
  • 0
22 часа назад, krapotkin сказал:

Ну вообще для меня вот неочевидно, что размер невидимого компонента должен быть определен.

если у меня три панели и две из них невидимы, то это сильно влияет на размеры и положение третьей

Неочевидного хватает. Радует, что пока так или иначе это побеждается. VCL со своей вылизанностью и близко не подпускает FMX )) .. хотя ряд вещей "искоропки" радует

Ссылка на комментарий
  • 0
В 14.12.2017 в 16:55, FREEFAR сказал:

procedure PreloadContent(const Control: TControl);
var
  I: Integer;
begin
  if Control is TStyledControl then
    TStyledControl(Control).ApplyStyleLookup;
  for I := 0 to Control.ControlsCount - 1 do
    PreloadContent(Control.Controls);
end;

Berlin ругается при компиляции на вот эту строку: PreloadContent(Control.Controls);

Incompatible types: 'TControl' and 'System.Generics.Collections.TList<FMX.Controls.TControl>'

Что не так у меня?

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

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

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

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

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

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

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

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

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

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