• 1
97mik

[TTabControl] Как сделать плавное переключение двух вкладок в TTabControl?

Вопросы

Как сделать переход при выборе пункта в ListBox?

И можно ли при этом будет вернутся свайпом слева направо?

post-6-0-07273500-1389180247_thumb.png post-6-0-39918600-1389180270_thumb.png

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


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

1 ответ на этот вопрос

  • 0

Самый простой вариант использования эффекта прокручивания основывается на использовании компонента TTabControl, который реализует переключение табов (вкладок) с анимацией. Для этого достаточно:

  1. Поместить TTabControl на форму и растянуть его на всю область TTabControl.Align = alClient.
  2. Создать вкладки. Одну вкладку на один логический экран (слайд, представление и тд). На каждую вкладку помещаете любой контент. В вашем случае TListBox.
  3. Вызвать в нужный момент метод переключения вкладок с анимацией:
TTabControl.SetActiveTabWithTransition(const ATab: TTabItem; ATransition: TTabTransition; const ADirection: TTabTransitionDirection = TTabTransitionDirection.tdNormal)

Где, 

  • ATab: TTabItem - Вкладка, которую нужно отобразить
  • ATransition: TTabTransition - Отобразить вкладку мгновенно или с эффектом сдвига (В вашем случае нужно второе TTabTransition.ttSlide)
  • ADirection: TTabTransitionDirection - направление эффекта сдвига: Слева на право (TTabTransitionDirection.tdNormal) или с права налево (TTabTransitionDirection.tdReversed).

Второй способ

Аналогично создаем Таб контрол с вкладками, но для переключения вкладок используем стандартное действие TChangeTabAction, которое выполняет те же действия, что и SetActiveTabWithTransition. Действия доступны в редакторе TActionList "New Standart Action..."

 

post-1-0-87246100-1389534894.jpgpost-1-0-00200200-1389534895.jpg

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


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

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

    • От Вадим Смоленский
      Год назад в одной из веток проскочила ссылка на китайский сайт (http://www.raysoftware.cn/?p=559), где предлагалось готовое решение для показа анимированных гифок средствами FireMonkey на любых платформах. Сейчас эта ссылка, как и весь сайт raysoftware.cn, упорно не открывается; по счастью, контент сохранился в гугловском кэше. Я скопировал оттуда код юнита и перевел гуглом все китайские комментарии на английский, добавив их в скобках. Там был еще сопроводительный текст, в котором автор излагал мотивы, побудившие его взяться за эту проблему; каких-то важных технических деталей я в этом тексте не увидел.
      Привожу весь юнит ниже и очень надеюсь, что кто-нибудь из продвинутых коллег объяснит мне, как именно этим кодом можно воспользоваться, чтобы показать пользователю анимированный файл в формате GIF. Моей программерской квалификации, к сожалению, не хватает.
       
    • От Вячеслав
      Добрый день, форумчане! Столкнулся со следующей задачей: 
      Имеется TListBox с 32 итемами, задаются в DesignTime. В некоторых ситуациях требуется убрать половину, оставить только первые 16 итемов. Я делаю лишние невидимыми, но при этом область прокрутки листбокса остается прежней и излишне большой. В связи с этим вопрос: можно ли как-то ограничить область прокрутки? 
      XE7, Windows.
    • От ENERGY
      Привет. 
      Очень нужно мнение профессионалов FMX.
      Нужно создать анимированный контрол - как на гифке .
      По кругу ходит точка, которую можно перемещать. Также должен меняться цвет градиента (теплый или холодный цвета).
      Как думаете возможно ли создать такое контрол в FMX, если да то с чего лучше начать.
      Если брать векторную графику, рисуем этот круг, то как затем его деформировать. И что делать с другими элементами, - волной например. Дорисовать ее в виде Bitmap ?
      Посоветуйте пожалуйста.  
       
    • От x11
      У TTabControl есть пара элементов TTabItem.
      Нужно с анимацией переключаться между ними.
      В ActionList добавил стандартный Action - ChangeTabAction и создал процедуру:
      procedure TfmMain.ChangeTab(ATab: TTabItem); begin ChangeTabAction1.Tab := ATab; ChangeTabAction1.ExecuteTarget(self); end;  
      Проблема в том, что при переключении с первой на вторую вкладку TTabItem анимации нет.
      А вот если переключаешься обратно на первую вкладку, то анимация есть.
      Но... проблема проявляется только на Андроид-устройстве. На Windows переключаение выполняется с анимацией в обе стороны.
       
    • От x11
      Можно ли во время работы программы вызвать Items editor, который я вызываю во время дизайна приложения?
      Или свой лисапет создавать?
    • От x11
      Процедура добавления Item
       
      procedure TfmEditObject.AddPhoto(Image: TBitmap); Var item: TListBoxItem; imageV: TImageViewer; begin item := TListBoxItem.Create(lbPhotos); item.parent := lbPhotos; item.text := ''; item.Width := lbPhotos.Width; item.PopupMenu := PopupMenu1; imageV := TImageViewer.Create(lbPhotos); imageV.HitTest := False; imageV.Parent := item; imageV.Align := TAlignLayout.Client; imageV.Bitmap.Assign(image); item.SetFocus; end; У popupmenu есть 2 пункта, привязанных к Action.
       
      Gestures срабатывает на "long tap"
      procedure TfmEditObject.lbPhotosGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); var c: IControl; ListBox: TListBox; lbxPoint: TPointF; ListBoxItem: TListBoxItem; begin if EventInfo.GestureID = igiLongTap then if (sender is TListBox) and assigned(TListBox(sender).Selected) then begin c := ObjectAtPoint(EventInfo.Location); if Assigned(c) then if Assigned(c.GetObject) then if c.GetObject is TListBox then begin ListBox := TListBox(c.GetObject); lbxPoint := ListBox.AbsoluteToLocal(EventInfo.Location); ListBoxItem := ListBox.ItemByPoint(lbxPoint.X, lbxPoint.Y); if Assigned(ListBoxItem) then PopupMenu1.Popup(lbxPoint.X, lbxPoint.Y); Handled := True; end; end; end;  
      Ставил точку останова, видно, что до строки "PopupMenu1.Popup(lbxPoint.X, lbxPoint.Y);" доходит.
      Если программа работает на Windows, то меню отображается по правой кнопке мышки, а на андроид устройстве меню не отображается по Long Tap.
       
      Как видно из кода, то меню прикручивается к ListBoxItem, а непосредственно к TListBox меню прикрутил в дизайне.
    • От x11
      Хочу реализовать прокрутку фото с помощью TListBox.
      Пока что в дизайне добавил пару Item и кинул на них TImageViewer, ну и картинку туда вставил.
      В свойстве TListStyle указал Horizontal. На Windows не листается мышкой влево/вправо, но есть хотя бы полоса прокрутки внизу.
      На андроид-устройстве и не листается, и полосы прокрутки нет вообще.
      Это связано с этим вопросом http://fire-monkey.ru/topic/4301-выводотображение-нескольких-картинок-на-форме
    • От denprox
      Доброго времени суток! Есть у кого ни будь пример того, как в RunTime нарисовать путь, по которому потом сможет двигаться объект ? 
      Я смог найти только видео:
      Tutorial: TPathAnimation in FireMonkey XE6
       
    • От x11
      В свойстве TListBox.ListStyle установил значение Horizontal. Список поменял вид.
      Теперь ставлю Vertical, но ничего не происходит.
      Как вернуть стиль списка обратно к вертикальному?
    • От ENERGY
      Программа имеет большое кол. элементов интерфейса и много экранов.
      Поэтому я сделал такую вещь - Таб контрол, на котором лежит часть постоянно загружаемого интерфейса, и одна закладка (tabPage) куда загружаются фреймы - там лежат редко используемые экраны,
      т.е. фрэйм создаю  в runtime, ставлю фрэйму MyFrame.Parent := FrameTabPage и показываю этот таб кодом  TabControl.SetActiveTabWithTransition
      Юзер ушел с этой страницы я убираю фрейм кодом MyFrame.Parent := nil
      Все работает, но  проблема в том что это сильно подтормаживает систему - в результате анимация Slide таба двигается рывками. Тормозит на этапе MyFrame.Parent := FrameTabPage, т.е. даже если я создам фрейм на этапе старта программы, то все равно будет тормозить на этом этапе MyFrame.Parent := FrameTabPage (видимо подгоняются размеры, на фрейме лежит ListBox с контролами ). .
      Если Parent фрэйма заранее поставить на нужный TabPage, то ничего не тормозит, но программа грузится дольше.
      Посоветуйте пожалуйста что можно тут придумать, ведь кто-то использует фреймы..
  • Последние посетители   0 пользователей онлайн

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