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

Тормозит анимация TabControl при использовании TFrame (на MyFrame.Parent := FrameTabPage )


ENERGY

Вопрос

Программа имеет большое кол. элементов интерфейса и много экранов.

Поэтому я сделал такую вещь - Таб контрол, на котором лежит часть постоянно загружаемого интерфейса, и одна закладка (tabPage) куда загружаются фреймы - там лежат редко используемые экраны,

т.е. фрэйм создаю  в runtime, ставлю фрэйму MyFrame.Parent := FrameTabPage и показываю этот таб кодом  TabControl.SetActiveTabWithTransition

Юзер ушел с этой страницы я убираю фрейм кодом MyFrame.Parent := nil

Все работает, но  проблема в том что это сильно подтормаживает систему - в результате анимация Slide таба двигается рывками. Тормозит на этапе MyFrame.Parent := FrameTabPage, т.е. даже если я создам фрейм на этапе старта программы, то все равно будет тормозить на этом этапе MyFrame.Parent := FrameTabPage (видимо подгоняются размеры, на фрейме лежит ListBox с контролами ). .

Если Parent фрэйма заранее поставить на нужный TabPage, то ничего не тормозит, но программа грузится дольше.

Посоветуйте пожалуйста что можно тут придумать, ведь кто-то использует фреймы..

Изменено пользователем ENRGY
Ссылка на комментарий

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

  • 0

Спасибо за ответ!

Если перед вызовом TabControl.SetActiveTabWithTransition добавить  PreloadContent(MyFrame); - то все также тормозит.

Но если добавить после PreloadContent строчку Application.ProcessMessages; - то тогда анимация не тормозит.

НО, там пауза около 2 секунд, получается юзер тапнул на Item и ждет 2 секунды пока фрэйм подгрузится...

Наверное сделаю вообще без анимации.

На компе не тормозит, тормозит только на телефоне..

 

Изменено пользователем ENRGY
Ссылка на комментарий
  • 0

В общем я решил так сделать.

На пустой таб странице, на которой в будущем будет лежать фрейм кинул Ttext с надписью Loading .

Дальше делаю так: 

TabControl.SetActiveTabWithTransition  - загружаю с анимацей пустую страницу (на нее потом будет положен фрэйм) с надписью Loading - т.е. отодвигается текущая страница и загружается пустая.
 Application.ProcessMessages;  - это для того чтобы была анимация

MyFrame.Parent := tiFrameTab;  - загружаю на табстраницу мой фрейм.

 Application.ProcessMessages; - нужно еще раз, чтобы установился размер высоты заголовков из стиля listboxgroupheader (иначе он не ставиться сам в этом случае)

Изменено пользователем ENRGY
Ссылка на комментарий
  • 0

krapotkin

В моем случае это явно будет лишнее. Часть времени потратить на отрисовку анимации. Там всего то 1 - 2 секунды.

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

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

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

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

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

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

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

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

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

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

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