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

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

Вопрос

У 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
31 минуту назад, x11 сказал:

Slide включен.

Пробовал и direction менять.

Покажите код

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
27 минут назад, x11 сказал:

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 минуты назад, Евгений Корепов сказал:

вы используете глючную прокладку ActionList

 

Вообще-то да,  я именно про Action - ChangeTabAction  и пишу.

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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

Не могу понять, как заполнение ListView влияет анимацию TabControl?

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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;

 

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


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да у меня тоже все легко и просто, если нет наполнения ListView перед переключением.

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


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


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

    • От ENERGY
      Программа имеет большое кол. элементов интерфейса и много экранов.
      Поэтому я сделал такую вещь - Таб контрол, на котором лежит часть постоянно загружаемого интерфейса, и одна закладка (tabPage) куда загружаются фреймы - там лежат редко используемые экраны,
      т.е. фрэйм создаю  в runtime, ставлю фрэйму MyFrame.Parent := FrameTabPage и показываю этот таб кодом  TabControl.SetActiveTabWithTransition
      Юзер ушел с этой страницы я убираю фрейм кодом MyFrame.Parent := nil
      Все работает, но  проблема в том что это сильно подтормаживает систему - в результате анимация Slide таба двигается рывками. Тормозит на этапе MyFrame.Parent := FrameTabPage, т.е. даже если я создам фрейм на этапе старта программы, то все равно будет тормозить на этом этапе MyFrame.Parent := FrameTabPage (видимо подгоняются размеры, на фрейме лежит ListBox с контролами ). .
      Если Parent фрэйма заранее поставить на нужный TabPage, то ничего не тормозит, но программа грузится дольше.
      Посоветуйте пожалуйста что можно тут придумать, ведь кто-то использует фреймы..
    • От Dinkin
      Добрый вечер!
      Не подскажете, есть ли в  TabControl кнопки закрыть вкладку, на подобие закрытия вкладок браузера?....если нет, то как луче всего их организовать?
    • От Alesk
      Имеется TTabControl, в нем две вкладки. На одной два expander'a(в каждом будем считать по 3 кнопки), другая - пустая. Перелистывание происходит крайне медленно (лагает, скажем так проседает фпс) когда оба expander'a раскрыты, когда они свернуты перелистывание происходит плавнее. Можно ли как-нибудь это исправить? Причем тормозит все, даже раскрыстие expander'ов происходит с задержкой.
    • От Евгений Корепов
      Заметил в нескольких своих приложениях странное поведение TTabControl на Андроиде - первое переключение табов c TTabTransition.Slide вызывает фриз отсновного потока приложения примерно на секунду. Не зависит от содержания табов. Не зависит от метода создания табов и табконтрола. Последующие смены табов проходят гладко.
      Можно как нибудь передернуть заранее механизм анимации (думаю в нем причина)?
    • От Akromd
      При динамическом перелистывании исчезает название Tab'а с которого происходит переход
      Вначале я убираю вкладки и перехожу на нужный tab
      TabControl1.tabindex := 1; Tabcontrol1.tabposition := ttabposition.none Затем делаю переход обратно и возвращаю вкладки, но та с которой делал переход исчезает.
      TabControl1.tabindex := 2; Tabcontrol1.tabposition := ttabposition.top До:
      После:
      Кто нибудь сталкивался с таким?
    • От Алекс
      Добрый день!
      Однажды на форуме обсуждалась тема как сделать переключение вкладок TabControl  с анимацией через TActionList.
      Сейчас возникла необходимость переключать вкладки через жест pan? т.е. чтобы вкладка двигалась за пальцем пользователя (как это сделано практически во всех мобильных приложениях, например в фейсбуке. Ниже скрин, на котором показаны по половине обе вкладки, они в этот момент перетаскиваются пальцем).
      Это реально сделать? Если да, то как? Я уже подозреваю, что табом такого не сделаешь, а только широкой панелью, разделенное на сектора.

    • От estra
      Как, используя метод SetActiveTabWithTransition, изменить скорость анимации (Duration)?
    • От 97mik
      Как сделать переход при выборе пункта в ListBox?
      И можно ли при этом будет вернутся свайпом слева направо?
       
    • От antarey
      Можно ли реализовать эффект перелистывания листов книги при смене табов в табконтрол?
      Пробовал реализовать в 3D приложении.
      На Layer3D кидал табконтрол и свойство Layer3D->RotationAngle->Y привязывал к FloatAnimation->StopValue=360
      Но получается не красиво - делается два оборота,- может есть возможность полностью перевернуть табконтрол на 360о , в идеале табитем,за один поворот 180о ?
      Если кто смотрел на андроиде NextLauncher, в нем можно поставить эффект перелистывания рабочих столов Ткань, что-то типа такого я хочу реализовать

      Вот, только ето сильно крутой эффект, меня устроит и простое прямоугольное перелистывание , желательно итемов табконтрола но устроит и вариант смена итема и переворот всего табконтрола
      RotationAngle->Y  подходит, но из за того что происходит двойной переворот табконтрола и визуально ето не красиво, а реализовать переворот на 360 в одном перевороте пока не выходит
      Заранее спасибо
    • От brunnengi
      Здравствуйте.
      Подскажите пожалуйста как правильно создать новые вкладки у TTabControl и как потом удалить все вкладки кроме первой включая содержимое, которое тоже создавалось в run-time.
      Новые вкладки создаю через
      TabControl.Add(); А удалять пробовал и через Destroy и через Delete, но то не удаляет то сыпет ошибками, то виснет приложение.
      В частном случае, то бишь моем, у меня TabControl имеет одну вкладку созданную в DisignTime.
      Требуется создать новые. А потом удалить все вкладки с содержимым кроме первой.
  • Последние посетители   0 пользователей онлайн

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

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