Jump to content

Recommended Posts

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
Posted

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

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

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

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

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

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

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

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

Posted

Добрый день!

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

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

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

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

Posted (edited)

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

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

Edited by Stas
Posted (edited)
19 минут назад, Stas сказал:

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

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

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

Edited by Benten
Posted

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

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

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

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

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

Edited by Benten
Posted (edited)

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

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

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

Edited by Benten
Posted

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

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

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

Posted (edited)
57 минут назад, Benten сказал:

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

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

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

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

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

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

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

Posted

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

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

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

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

Posted (edited)

Всем большое спасибо за участие и помощь.  Ларчик просто открывался. Сплиттер реализуется программно тремя строчками кода через обработчик 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
  • Administrators
Posted

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

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

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

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

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...