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

Нет анимации в ChangeTabAction


x11

Вопрос

У TTabControl есть пара элементов TTabItem.

Нужно с анимацией переключаться между ними.

В ActionList добавил стандартный Action - ChangeTabAction и создал процедуру:

procedure TfmMain.ChangeTab(ATab: TTabItem);
begin
  ChangeTabAction1.Tab := ATab;
  ChangeTabAction1.ExecuteTarget(self);
end;

 

Проблема в том, что при переключении с первой на вторую вкладку TTabItem анимации нет.

А вот если переключаешься обратно на первую вкладку, то анимация есть.

Но... проблема проявляется только на Андроид-устройстве. На Windows переключаение выполняется с анимацией в обе стороны.

 

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

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

  • 0

Для этого не нужно использовать муторную прокладку ActionList, у TabControl есть свои замечательные методы:

  TabControl.Next(TTabTransition.Slide, TTabTransitionDirection.Normal); // Следующий Таб
  TabControl.Previous(TTabTransition.Slide, TTabTransitionDirection.Reversed); // Предыдущий Таб
  TabControl.GotoVisibleTab(ATabIndex, TTabTransition.Slide, TTabTransitionDirection.Normal); // Переключение на произвольный Таб

С помощью TTabTransition.Slide указываете тип переключения (анимация) и  с помощью TTabTransitionDirection.Normal  указываете направление анимации. Работает на всех платформах.

Изменено пользователем Евгений Корепов
Ссылка на комментарий
  • 0
27 минут назад, x11 сказал:

Так в первом сообщении.

Может Вы не поняли? Переключение работает. Но нет анимации.

В вашем сообщении нет кода переключения с анимацией, вы используете глючную прокладку ActionList, в надежде что чужой код (заброшенный кстати несколько лет назад) выполнит за вас некую работу. Я же вам ответил вполне определенно и с примерами нужных методов для достижения результата.

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

Аааа, я неверно Вас понял.

 

я подумал, что Вы пишите как раз про этот ChangeTabAction, т.е. там тоже есть slide и normal.

2 часа назад, Евгений Корепов сказал:

 

TTabTransition.Slide, TTabTransitionDirection.Normal

 

Стормозил.

Попробую Ваш код позже.

Спасибо.

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

В общем, всё равно что-то не так с анимацией на Андроид-устройстве.

Использую только GotoVisibleTab.

tabRes - это переключение на следующую вкладку:

procedure TfmMain.actParamsSearchShowExecute(Sender: TObject);
begin
  if tabRes.IsSelected then
  begin
    TabControl1.GotoVisibleTab(tabParams.Index, TTabTransition.Slide, TTabTransitionDirection.Normal);
    exit;
  end;

  if tabParams.IsSelected then
    TabControl1.GotoVisibleTab(tabRes.Index, TTabTransition.Slide, TTabTransitionDirection.Normal);
end;

Одна и та же кнопка переключает туда или обратно (2 вкладки всего).

Когда нажимаешь кнопку, то туда-сюда переключается с анимацией.

 

 

 

А вот здесь (кнопка Вперед) переключается без анимации:

procedure TfmMain.actOpenUpdateExecute(Sender: TObject);
begin
  dm.UniConnection1.connect;
  LoadLV(lvObjects);
  TabControl1.GotoVisibleTab(tabRes.Index, TTabTransition.Slide, TTabTransitionDirection.Normal);
end;

 

А вот здесь (кнопка Назад) переключается с анимацией:

procedure TfmMain.actPreviousTabActionExecute(Sender: TObject);
begin
  ChangeTab(tabParams);
end;


procedure TfmMain.ChangeTab(ATab: TTabItem);
begin
  TabControl1.GotoVisibleTab(ATab.Index, TTabTransition.Slide, TTabTransitionDirection.Normal);
end;

 

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

В общем, решил криво - поменял местами.

 

procedure TfmMain.actOpenUpdateExecute(Sender: TObject);
begin
  ChangeTab(tabRes);
  dm.UniConnection1.connect;
  LoadLV(lvObjects);
end;

теперь переключение, а потом только наполнение ListView

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

Вот моя процедура переключения, все легко и просто:

procedure TFormMain.SetActiveTab(ATabControl : TTabControl; ATabItem : TTabItem; ATransition : Boolean);
Var ATabTransitionDirection : TTabTransitionDirection;
    ATabTransition : TTabTransition;
begin
  if ATabControl.TabIndex = ATabItem.Index Then
    Exit;
  if ATransition then
    ATabTransition:=TTabTransition.Slide
  Else
    ATabTransition:=TTabTransition.None;
  if ATabControl.TabIndex < ATabItem.Index Then
    ATabTransitionDirection:=TTabTransitionDirection.Normal
  Else
    ATabTransitionDirection:=TTabTransitionDirection.Reversed;
  ATabControl.SetActiveTabWithTransition(ATabItem,ATabTransition,ATabTransitionDirection);
end;

 

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

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

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

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

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

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

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

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

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

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