Jump to content

Featured Replies

Posted

Добрый день.

Прошу добавить в библиотеку компонент Splitter или подскажите, как его реализовать имеющимися средствами?

В настоящий момент я попробовал сделать вот так, но получается криво. Для сравнения я показываю как плавно и быстро работает сплиттер в похожем приложении

procedure TFrameHalls.btnTableSplitterTouch(Sender: TObject;
  const ATouches: TfgTouches; const AAction: TfgTouchAction;
  var AHandled: Boolean);
begin
  inherited;
  if AAction = TfgTouchAction.Down then
  begin
    LtTableInfo.Tag := Trunc(LtTableInfo.Size.Height);    // Начальная высота верхней панели
    LtTableSplitter.Tag := Trunc(ATouches[0].Location.Y); // Начальное смещение касания сплиттера
  end else
  if AAction = TfgTouchAction.Up then
  begin
    LtTableInfo.Tag := 0;
    LtTableSplitter.Tag := 0;
  end else
  if AAction = TfgTouchAction.Move then
  begin
    sbTables.BeginUpdate;
    try
      LtTableInfo.Size.Height := LtTableInfo.Tag + Trunc(ATouches[0].Location.Y) - LtTableSplitter.Tag;
      sbTables.Realign;
    finally
      sbTables.EndUpdate;
    end;
  end;

end;

 

  • Administrators

Здравствуйте.

45 минут назад, Benten сказал:

Прошу добавить в библиотеку компонент Splitter или подскажите, как его реализовать имеющимися средствами?

Обратите внимание на компонент TfgBottomSheetLayout. В поставке библиотеки есть несколько примеров с этим компонентом.

  • Author
Только что, Viktor Akselrod сказал:

Здравствуйте.

Обратите внимание на компонент TfgBottomSheetLayout. В поставке библиотеки есть несколько примеров с этим компонентом.

Спасибо, посмотрю, может получится применить.

  • Author

Добрый день!

Посмотрел внимательнее компонент TfgBottomSheetLayout. Не подходит, слишком много ограничений.

Во-первых, расположение  выдвигающегося TfgBottomSheet только внизу, а мне надо вверху.

Во-вторых, TfgBottomSheet имеет только две фиксированные высоты - PickHeight и Height, а мне нужна плавающая высота выдвигающегося компонента

Плавность и анимация TfgBottomSheetLayout конечно на высоте, но этого мало.  Нужен полноценный компонент.  Очень странно, что такой распространенный компонент, как TfgSplitter, до сих пор никому не понадобился. Вот я и подумал, может разработчики обходятся каким-то другим способом, про который я не знаю?

Честно скажу, я не помню, чтобы видел такое в мобильных приложениях.

Учитывая небольшой экран (как правило), там особо не подвигаешь.

Edited by Stas

  • Author
19 минут назад, Stas сказал:

Честно скажу, я не помню, чтобы видел такое в мобильных приложениях.

Посмотрите мое видео выше, там используется сплиттер во втором приложении, при этом приложение очень популярное в РФ.

Да и насчет небольшого экрана в корне не согласен, у меня приложуха должна работать на планшетах 10-11". Скажу больше, мне еще и вертикальный сплиттер нужен.

Edited by Benten

@Benten в вышеуказанном приложении как раз таки используется компонент из семейства TfgBottomSheetLayout. Возможно он отличается чем то, только из-за того что был реализован в другой среде. А в принципе такое поведение возможно реализовать в FGX

  • Author
23 минуты назад, knsg12 сказал:

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

@knsg12  я и реализовал в FGX через событие OnTouch на разделителе между компонентами btnTableSplitterTouch (см. первый отрезок видео в первом посте), но получается очень дёрганно, не хватает плавности и скорости перемещения сплиттера.

Может кто-то поможет в этом вопросе, как сделать отработку сплиттера более плавной и быстрой с помощью события btnTableSplitterTouch?

Edited by Benten

  • Author

Второй день мучаюсь с этим сплиттером, не выходит красиво и плавно через OnTouch.

В конце концов, в FMX  такой сплиттер и много чего еще есть.

Чем тогда FGX-Native лучше FMX?  Только удобным Assets менеджером?

Edited by Benten

Добрый вечер! 
Подобное действие реализуется через ботомшит.

Вообще для начала я бы посоветовал вам взглянуть на задачу с другой стороны. Я понимаю, что мы родом из десктопов, но здесь другая парадигма и сплитер как он работал на десктопе здесь не уместен. Поэтому его и не применяют в основном. Вместо сплитеров используют боковые, всплывающие панели.

Во вторых, не всегда то что мы видим в других приложениях это самый оптимальный или лучший вариант, можно из того что мы имеем сейчас сделать даже лучше. Вот есть у вас боттомШит и в принципе его возможностей достаточно что бы реализовать, то что вы показывали на видео. Может быть он не будет иметь прям один в один тот же функционал, но все это можно сгладить другими преимущпствами.

57 минут назад, Benten сказал:

Чем тогда FGX-Native лучше FMX?  Только удобным Assets менеджером?

И не только, флекс, коллекшнВью эти даже две фичи не сравнимы с FMX. То что они делают, не сделать на FMX. Да даже возьмите приложение на FMX и сравните с FGX я думаю разница на лицо. Нативное есть нативное.

Edited by knsg12

  • Author
4 минуты назад, knsg12 сказал:

Вот рабочий пример на FGX TfgBottomSheetLayout.

Это совсем не то.  У вас меню имеет два фиксированных размера, либо оно заданной высоты, либо скрыто.

А вы сделайте, чтобы меню было с плавающей высотой.

P.S.  Кстати, вы тоже пишите мобильного официанта? 😀

Так я же говорю, что есть функционал, который нет так необходим. Вот в чем преимущество плавающей высоты? Одна фиксированная высота достаточна, я не копался дальше просто не было такой задачи, но можно посмотреть. Возможно можно будет динамически менять высоту. Просто в этом нет особой необходимости. Я понимаю вы пытаетесь сделать так как у кого то, но опять же посмотрите по другому. В данном компоненте для такой задачи функционала думаю достаточно.
 

5 минут назад, Benten сказал:

P.S.  Кстати, вы тоже пишите мобильного официанта? 😀

Да когда то стояла задача, давно ничего не обновлял.

  • Author

Всем большое спасибо за участие и помощь.  Ларчик просто открывался. Сплиттер реализуется программно тремя строчками кода через обработчик OnTouch

Ключевой момент заключается в том, что координату касания на сплиттере надо привести к системе координат формы с помощью метода  LocalToForm

procedure TFrameHalls.LtTableSplitterTouch(Sender: TObject;
  const ATouches: TfgTouches; const AAction: TfgTouchAction;
  var AHandled: Boolean);
begin
  inherited;

  LtTableInfo.BeginUpdate;
  try
    LtTableInfo.Size.Height := TfgControl(Sender).LocalToForm(ATouches[0].Location).Y;
    LtTableInfo.Realign;
  finally
    LtTableInfo.EndUpdate;
  end;

  AHandled := True;
end;

 

Edited by Benten

  • Administrators

Извиняюсь, забегался с реализацией GooglePay. Но рад слышать, что вопрос со сплитером решился.

1 час назад, Benten сказал:

Сплиттер реализуется программно тремя строчками кода через обработчик OnTouch

Да, все верно. Нужно обязательно использовать координаты формы, как и в FMX, кстати. Потому что касания приходят в локальной системе координат и при выравнивании происходит легкие скачкообразные изменения, что и видно на видео. Поэтому надо выполнять преобразование локальных координат в систему координат формы, чтобы исключить из расчета эти изменения.

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.