Jump to content

[TfgSplitter] Не хватает такого компонента


Benten

Recommended Posts

Добрый день.

Прошу добавить в библиотеку компонент 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;

 

Link to comment
Share on other sites

  • Administrators

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

Добрый день!

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

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

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

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

Link to comment
Share on other sites

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

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

Edited by Stas
Link to comment
Share on other sites

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

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

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

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

Edited by Benten
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

Edited by Benten
Link to comment
Share on other sites

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

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

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

Edited by Benten
Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

Edited by knsg12
Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

Всем большое спасибо за участие и помощь.  Ларчик просто открывался. Сплиттер реализуется программно тремя строчками кода через обработчик 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
  • Like 4
Link to comment
Share on other sites

  • Administrators

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

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...