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

[TTabControl] Переключение вкладок TabControl через Pan Event

Вопрос

Добрый день!

Однажды на форуме обсуждалась тема как сделать переключение вкладок TabControl  с анимацией через TActionList.

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

Это реально сделать? Если да, то как? Я уже подозреваю, что табом такого не сделаешь, а только широкой панелью, разделенное на сектора.

post-172-0-80732600-1417850662_thumb.jpe

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


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

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

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

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

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

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

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

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

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

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


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

    • От nassl
      Нужна помощь!
      Все перепробовал, не выходит каменный цветок...
      На форме лежит скрытый компонент THUETrackBar.
      Хочется реализовать следующий функционал на с++ (fmx): свайп вверх по любому месту экрана - делает компонент THUETrackBar видимым, и двигает его ползунок вверх, свайп  вниз - соответственно вниз.
      этот код не фурычит в процессе свайпа, только по завершении
       
      void __fastcall TForm1::windGesture(TObject *Sender, const TGestureEventInfo &EventInfo, bool &Handled) { switch (EventInfo.GestureID) { case sgiUp: TmpBar->Visible=true; TmpBar->Value++; break; case sgiDown: TmpBar->Visible=true; TmpBar->Value--; break; case igiLongTap: TmpBar->Visible=true;Location_x=EventInfo.Location.x; break; } } Хотел использовать свойство EventInfo.Location.x, но значение меняется только по окончании свайпа. 
       
       
    • От tLink
      Всем доброго времени суток,
      Столкнулся с проблемой на iOS. На форме TabControl, на одной из вкладок лежит MapView (примерчик приложил). Если "свернуть/развернуть" приложение и походить по вкладкам, то пропадают иконки у TabControl, показывает как чёрные квадраты. Иконки установлены через ImageList. Такой же эффект и у ListView/Image на соседних вкладках. Можете что-то подсказать?
       
      project1 (2).rar
    • От x11
      У TTabControl есть пара элементов TTabItem.
      Нужно с анимацией переключаться между ними.
      В ActionList добавил стандартный Action - ChangeTabAction и создал процедуру:
      procedure TfmMain.ChangeTab(ATab: TTabItem); begin ChangeTabAction1.Tab := ATab; ChangeTabAction1.ExecuteTarget(self); end;  
      Проблема в том, что при переключении с первой на вторую вкладку TTabItem анимации нет.
      А вот если переключаешься обратно на первую вкладку, то анимация есть.
      Но... проблема проявляется только на Андроид-устройстве. На Windows переключаение выполняется с анимацией в обе стороны.
       
    • От Rustam Bikeev
      Суть проблемы следующая: после перехода с одной вкладки на другую в tabcontrol страница не отображается, фактически она переключается но на экране отображается предыдущая вкладка с которой был переход, ровно до той поры пока на что нибудь не клацнешь, нужно либо нажать на кнопку в тулбаре либо открыть multiview. После того как я первый раз с этим столкнулся я так и делал программно открывал и закрывал multiview, но не могу же я так делать постоянно, нужно решить проблему. Для подробности напишу, что есть основной tabcontrol в котором вкладки открываются из multiview, во вкладках есть вложенные tabcontrol-ы, со своими страницами в основном по 2 страницы. 
      Зря я начал делать приложения в делфи... чем дальше в лес тем больше дров.
    • От Макс Войтенко
      Хотел сделать вот так (1 скриншот)

      Выбраная вкладка (аккаунты): иконка красная. А остальные вкладки чтобы иконка была серая. (как шрифт ниже).
      Подскажите как решить?
    • От Anasazi
      Доброго времени суток! Есть приложение в котором используется TWebbrowser, хотел сделать чтобы при свайпе справа-налево выполнялся WebBrowser.GoBack, но обнаружил что жесты работают везде кроме TWebbrowser. Подскажите пожалуйста есть ли какое-либо решение этой проблемы? RAD Studio Berlin Update 1.
    • От ENERGY
      Программа имеет большое кол. элементов интерфейса и много экранов.
      Поэтому я сделал такую вещь - Таб контрол, на котором лежит часть постоянно загружаемого интерфейса, и одна закладка (tabPage) куда загружаются фреймы - там лежат редко используемые экраны,
      т.е. фрэйм создаю  в runtime, ставлю фрэйму MyFrame.Parent := FrameTabPage и показываю этот таб кодом  TabControl.SetActiveTabWithTransition
      Юзер ушел с этой страницы я убираю фрейм кодом MyFrame.Parent := nil
      Все работает, но  проблема в том что это сильно подтормаживает систему - в результате анимация Slide таба двигается рывками. Тормозит на этапе MyFrame.Parent := FrameTabPage, т.е. даже если я создам фрейм на этапе старта программы, то все равно будет тормозить на этом этапе MyFrame.Parent := FrameTabPage (видимо подгоняются размеры, на фрейме лежит ListBox с контролами ). .
      Если Parent фрэйма заранее поставить на нужный TabPage, то ничего не тормозит, но программа грузится дольше.
      Посоветуйте пожалуйста что можно тут придумать, ведь кто-то использует фреймы..
    • От rakhmet
      Вопрос: как определить, какое именно действие совершает пользователь - увеличивает или уменьшает?

       
       
      Ответ: на примере сэмпла, поставляемого в комплекте с Delphi, в файле C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\Object Pascal\Mobile Snippets\InteractiveGestures\ImageZoom\ImageZoomU.pas можно попробовать заменить одну часть процедуры:
      begin { zoom the image } LImage := TImage(LObj.GetObject); LImageCenter := LImage.Position.Point + PointF(LImage.Width / 2, LImage.Height / 2); LImage.Width := LImage.Width + (EventInfo.Distance - FLastDistance); LImage.Height := LImage.Height + (EventInfo.Distance - FLastDistance); LImage.Position.X := LImageCenter.X - LImage.Width / 2; LImage.Position.Y := LImageCenter.Y - LImage.Height / 2; end; на другую:
      begin { zoom the image } if EventInfo.Distance > FLastDistance then showmessage('zoom in') else showmessage('zoom out'); end;  
      Что с этим делать дальше — думаю, объяснять излишне.
       
       
      Если кто знает более элегантное решение, не основанное на вычислении дистанции, — смело делитесь, не стесняйтесь.
    • От Dinkin
      Добрый вечер!
      Не подскажете, есть ли в  TabControl кнопки закрыть вкладку, на подобие закрытия вкладок браузера?....если нет, то как луче всего их организовать?
    • От Crusader99
      Я туплю.
      В рантайме создается панель (Ну пусть Panel1). Есть GestureManager1.  Связать их - не проблема :
      Panel1.Touch.GestureManager:=GestureManager1;
      Я не понимаю, как указать, какие жесты на Panel1 должны обрабатываться . Как/куда вписать, что надо реагировать например только на sgUp, sgLeft  и sgDoubleTap ?
      Если это существенно, то у меня Delphi  XE 5 Update 2 под Win 7.
  • Последние посетители   0 пользователей онлайн

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

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