Posted November 29, 20213 yr Добрый день. Прошу добавить в библиотеку компонент 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; Screenrecorder-2021-11-29-23-11-51-783.mp4
November 29, 20213 yr Administrators Здравствуйте. 45 минут назад, Benten сказал: Прошу добавить в библиотеку компонент Splitter или подскажите, как его реализовать имеющимися средствами? Обратите внимание на компонент TfgBottomSheetLayout. В поставке библиотеки есть несколько примеров с этим компонентом.
November 29, 20213 yr Author Только что, Viktor Akselrod сказал: Здравствуйте. Обратите внимание на компонент TfgBottomSheetLayout. В поставке библиотеки есть несколько примеров с этим компонентом. Спасибо, посмотрю, может получится применить.
November 30, 20213 yr Author Добрый день! Посмотрел внимательнее компонент TfgBottomSheetLayout. Не подходит, слишком много ограничений. Во-первых, расположение выдвигающегося TfgBottomSheet только внизу, а мне надо вверху. Во-вторых, TfgBottomSheet имеет только две фиксированные высоты - PickHeight и Height, а мне нужна плавающая высота выдвигающегося компонента Плавность и анимация TfgBottomSheetLayout конечно на высоте, но этого мало. Нужен полноценный компонент. Очень странно, что такой распространенный компонент, как TfgSplitter, до сих пор никому не понадобился. Вот я и подумал, может разработчики обходятся каким-то другим способом, про который я не знаю?
November 30, 20213 yr Честно скажу, я не помню, чтобы видел такое в мобильных приложениях. Учитывая небольшой экран (как правило), там особо не подвигаешь. Edited November 30, 20213 yr by Stas
November 30, 20213 yr Author 19 минут назад, Stas сказал: Честно скажу, я не помню, чтобы видел такое в мобильных приложениях. Посмотрите мое видео выше, там используется сплиттер во втором приложении, при этом приложение очень популярное в РФ. Да и насчет небольшого экрана в корне не согласен, у меня приложуха должна работать на планшетах 10-11". Скажу больше, мне еще и вертикальный сплиттер нужен. Edited November 30, 20213 yr by Benten
November 30, 20213 yr @Benten в вышеуказанном приложении как раз таки используется компонент из семейства TfgBottomSheetLayout. Возможно он отличается чем то, только из-за того что был реализован в другой среде. А в принципе такое поведение возможно реализовать в FGX
November 30, 20213 yr Author 23 минуты назад, knsg12 сказал: Возможно он отличается чем то, только из-за того что был реализован в другой среде. А в принципе такое поведение возможно реализовать в FGX @knsg12 я и реализовал в FGX через событие OnTouch на разделителе между компонентами btnTableSplitterTouch (см. первый отрезок видео в первом посте), но получается очень дёрганно, не хватает плавности и скорости перемещения сплиттера. Может кто-то поможет в этом вопросе, как сделать отработку сплиттера более плавной и быстрой с помощью события btnTableSplitterTouch? Edited November 30, 20213 yr by Benten
November 30, 20213 yr Author Второй день мучаюсь с этим сплиттером, не выходит красиво и плавно через OnTouch. В конце концов, в FMX такой сплиттер и много чего еще есть. Чем тогда FGX-Native лучше FMX? Только удобным Assets менеджером? Edited November 30, 20213 yr by Benten
November 30, 20213 yr Добрый вечер! Подобное действие реализуется через ботомшит. Вообще для начала я бы посоветовал вам взглянуть на задачу с другой стороны. Я понимаю, что мы родом из десктопов, но здесь другая парадигма и сплитер как он работал на десктопе здесь не уместен. Поэтому его и не применяют в основном. Вместо сплитеров используют боковые, всплывающие панели. Во вторых, не всегда то что мы видим в других приложениях это самый оптимальный или лучший вариант, можно из того что мы имеем сейчас сделать даже лучше. Вот есть у вас боттомШит и в принципе его возможностей достаточно что бы реализовать, то что вы показывали на видео. Может быть он не будет иметь прям один в один тот же функционал, но все это можно сгладить другими преимущпствами.
November 30, 20213 yr 57 минут назад, Benten сказал: Чем тогда FGX-Native лучше FMX? Только удобным Assets менеджером? И не только, флекс, коллекшнВью эти даже две фичи не сравнимы с FMX. То что они делают, не сделать на FMX. Да даже возьмите приложение на FMX и сравните с FGX я думаю разница на лицо. Нативное есть нативное. Edited November 30, 20213 yr by knsg12
November 30, 20213 yr Вот рабочий пример на FGX TfgBottomSheetLayout. Edited December 1, 20213 yr by knsg12
November 30, 20213 yr Author 4 минуты назад, knsg12 сказал: Вот рабочий пример на FGX TfgBottomSheetLayout. Это совсем не то. У вас меню имеет два фиксированных размера, либо оно заданной высоты, либо скрыто. А вы сделайте, чтобы меню было с плавающей высотой. P.S. Кстати, вы тоже пишите мобильного официанта? 😀
November 30, 20213 yr Так я же говорю, что есть функционал, который нет так необходим. Вот в чем преимущество плавающей высоты? Одна фиксированная высота достаточна, я не копался дальше просто не было такой задачи, но можно посмотреть. Возможно можно будет динамически менять высоту. Просто в этом нет особой необходимости. Я понимаю вы пытаетесь сделать так как у кого то, но опять же посмотрите по другому. В данном компоненте для такой задачи функционала думаю достаточно. 5 минут назад, Benten сказал: P.S. Кстати, вы тоже пишите мобильного официанта? 😀 Да когда то стояла задача, давно ничего не обновлял.
November 30, 20213 yr 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 November 30, 20213 yr by Benten
November 30, 20213 yr Administrators Извиняюсь, забегался с реализацией GooglePay. Но рад слышать, что вопрос со сплитером решился. 1 час назад, Benten сказал: Сплиттер реализуется программно тремя строчками кода через обработчик OnTouch Да, все верно. Нужно обязательно использовать координаты формы, как и в FMX, кстати. Потому что касания приходят в локальной системе координат и при выравнивании происходит легкие скачкообразные изменения, что и видно на видео. Поэтому надо выполнять преобразование локальных координат в систему координат формы, чтобы исключить из расчета эти изменения.
Create an account or sign in to comment