Benten Posted November 29, 2021 Share Posted November 29, 2021 Добрый день. Прошу добавить в библиотеку компонент 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 Quote Link to comment Share on other sites More sharing options...
Administrators Viktor Akselrod Posted November 29, 2021 Administrators Share Posted November 29, 2021 Здравствуйте. 45 минут назад, Benten сказал: Прошу добавить в библиотеку компонент Splitter или подскажите, как его реализовать имеющимися средствами? Обратите внимание на компонент TfgBottomSheetLayout. В поставке библиотеки есть несколько примеров с этим компонентом. Quote Link to comment Share on other sites More sharing options...
Benten Posted November 29, 2021 Author Share Posted November 29, 2021 Только что, Viktor Akselrod сказал: Здравствуйте. Обратите внимание на компонент TfgBottomSheetLayout. В поставке библиотеки есть несколько примеров с этим компонентом. Спасибо, посмотрю, может получится применить. Quote Link to comment Share on other sites More sharing options...
Benten Posted November 30, 2021 Author Share Posted November 30, 2021 Добрый день! Посмотрел внимательнее компонент TfgBottomSheetLayout. Не подходит, слишком много ограничений. Во-первых, расположение выдвигающегося TfgBottomSheet только внизу, а мне надо вверху. Во-вторых, TfgBottomSheet имеет только две фиксированные высоты - PickHeight и Height, а мне нужна плавающая высота выдвигающегося компонента Плавность и анимация TfgBottomSheetLayout конечно на высоте, но этого мало. Нужен полноценный компонент. Очень странно, что такой распространенный компонент, как TfgSplitter, до сих пор никому не понадобился. Вот я и подумал, может разработчики обходятся каким-то другим способом, про который я не знаю? Quote Link to comment Share on other sites More sharing options...
Stas Posted November 30, 2021 Share Posted November 30, 2021 (edited) Честно скажу, я не помню, чтобы видел такое в мобильных приложениях. Учитывая небольшой экран (как правило), там особо не подвигаешь. Edited November 30, 2021 by Stas Quote Link to comment Share on other sites More sharing options...
Benten Posted November 30, 2021 Author Share Posted November 30, 2021 (edited) 19 минут назад, Stas сказал: Честно скажу, я не помню, чтобы видел такое в мобильных приложениях. Посмотрите мое видео выше, там используется сплиттер во втором приложении, при этом приложение очень популярное в РФ. Да и насчет небольшого экрана в корне не согласен, у меня приложуха должна работать на планшетах 10-11". Скажу больше, мне еще и вертикальный сплиттер нужен. Edited November 30, 2021 by Benten Quote Link to comment Share on other sites More sharing options...
knsg12 Posted November 30, 2021 Share Posted November 30, 2021 @Benten в вышеуказанном приложении как раз таки используется компонент из семейства TfgBottomSheetLayout. Возможно он отличается чем то, только из-за того что был реализован в другой среде. А в принципе такое поведение возможно реализовать в FGX Quote Link to comment Share on other sites More sharing options...
Benten Posted November 30, 2021 Author Share Posted November 30, 2021 (edited) 23 минуты назад, knsg12 сказал: Возможно он отличается чем то, только из-за того что был реализован в другой среде. А в принципе такое поведение возможно реализовать в FGX @knsg12 я и реализовал в FGX через событие OnTouch на разделителе между компонентами btnTableSplitterTouch (см. первый отрезок видео в первом посте), но получается очень дёрганно, не хватает плавности и скорости перемещения сплиттера. Может кто-то поможет в этом вопросе, как сделать отработку сплиттера более плавной и быстрой с помощью события btnTableSplitterTouch? Edited November 30, 2021 by Benten Quote Link to comment Share on other sites More sharing options...
Benten Posted November 30, 2021 Author Share Posted November 30, 2021 (edited) Второй день мучаюсь с этим сплиттером, не выходит красиво и плавно через OnTouch. В конце концов, в FMX такой сплиттер и много чего еще есть. Чем тогда FGX-Native лучше FMX? Только удобным Assets менеджером? Edited November 30, 2021 by Benten Quote Link to comment Share on other sites More sharing options...
knsg12 Posted November 30, 2021 Share Posted November 30, 2021 Добрый вечер! Подобное действие реализуется через ботомшит. Вообще для начала я бы посоветовал вам взглянуть на задачу с другой стороны. Я понимаю, что мы родом из десктопов, но здесь другая парадигма и сплитер как он работал на десктопе здесь не уместен. Поэтому его и не применяют в основном. Вместо сплитеров используют боковые, всплывающие панели. Во вторых, не всегда то что мы видим в других приложениях это самый оптимальный или лучший вариант, можно из того что мы имеем сейчас сделать даже лучше. Вот есть у вас боттомШит и в принципе его возможностей достаточно что бы реализовать, то что вы показывали на видео. Может быть он не будет иметь прям один в один тот же функционал, но все это можно сгладить другими преимущпствами. Quote Link to comment Share on other sites More sharing options...
knsg12 Posted November 30, 2021 Share Posted November 30, 2021 (edited) 57 минут назад, Benten сказал: Чем тогда FGX-Native лучше FMX? Только удобным Assets менеджером? И не только, флекс, коллекшнВью эти даже две фичи не сравнимы с FMX. То что они делают, не сделать на FMX. Да даже возьмите приложение на FMX и сравните с FGX я думаю разница на лицо. Нативное есть нативное. Edited November 30, 2021 by knsg12 Quote Link to comment Share on other sites More sharing options...
knsg12 Posted November 30, 2021 Share Posted November 30, 2021 (edited) Вот рабочий пример на FGX TfgBottomSheetLayout. Edited December 1, 2021 by knsg12 Quote Link to comment Share on other sites More sharing options...
Benten Posted November 30, 2021 Author Share Posted November 30, 2021 4 минуты назад, knsg12 сказал: Вот рабочий пример на FGX TfgBottomSheetLayout. Это совсем не то. У вас меню имеет два фиксированных размера, либо оно заданной высоты, либо скрыто. А вы сделайте, чтобы меню было с плавающей высотой. P.S. Кстати, вы тоже пишите мобильного официанта? 😀 Quote Link to comment Share on other sites More sharing options...
knsg12 Posted November 30, 2021 Share Posted November 30, 2021 Так я же говорю, что есть функционал, который нет так необходим. Вот в чем преимущество плавающей высоты? Одна фиксированная высота достаточна, я не копался дальше просто не было такой задачи, но можно посмотреть. Возможно можно будет динамически менять высоту. Просто в этом нет особой необходимости. Я понимаю вы пытаетесь сделать так как у кого то, но опять же посмотрите по другому. В данном компоненте для такой задачи функционала думаю достаточно. 5 минут назад, Benten сказал: P.S. Кстати, вы тоже пишите мобильного официанта? 😀 Да когда то стояла задача, давно ничего не обновлял. Quote Link to comment Share on other sites More sharing options...
Benten Posted November 30, 2021 Author Share Posted November 30, 2021 (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 November 30, 2021 by Benten 4 Quote Link to comment Share on other sites More sharing options...
Administrators Yaroslav Brovin Posted November 30, 2021 Administrators Share Posted November 30, 2021 Извиняюсь, забегался с реализацией GooglePay. Но рад слышать, что вопрос со сплитером решился. 1 час назад, Benten сказал: Сплиттер реализуется программно тремя строчками кода через обработчик OnTouch Да, все верно. Нужно обязательно использовать координаты формы, как и в FMX, кстати. Потому что касания приходят в локальной системе координат и при выравнивании происходит легкие скачкообразные изменения, что и видно на видео. Поэтому надо выполнять преобразование локальных координат в систему координат формы, чтобы исключить из расчета эти изменения. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.