Перейти к содержанию
Fire Monkey от А до Я

dreamix

Пользователи
  • Постов

    9
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Сообщения, опубликованные dreamix

  1. У меня некоторые подвижки.
    Еще раз отмечу что это на Seattle без апдейтов. И тестил только на андроиде.

    1. Внутренний и сквозной) скроллинг работает и для обычного вертикального TListView. Но поведение у них не очень удобное.

    2. Внутренний и сквозной скроллинг работает для TListBox.
    Для этого ему нужно убрать Pan в InteractiveGestures.
    А если поставить ListStyle = Horizontal, то можно приспособить под горизонтальный скроллер.

     

    3.И я придумал как сделать сквозной скроллинг для THorzScrollBox
    - Надо убрать Pan в InteractiveGestures THorzScrollBox
    - Всем внутренним объектам назначить HitTest = False

    Теперь будет работать и внутренний и сквозной скроллинг

    А для доступа к внутренним объектам добавить в событие OnTap для THorzScrollBox
     

     

    procedure TForm1.HorzScrollBox1Tap(Sender: TObject; const [Ref] Point: TPointF);

      var Obj: IControl;
    begin
        AllHitTrue(Sender as TControl); // Включаем осязаемость внутренних объектов
        Obj:= self.ObjectAtPoint(ClientToScreen(Point));  // Получаем объект
        AllHitFalse(Sender as TControl); // Отключаем осязаемость внутренних объектов, чтобы снова можно было скроллить
    end;

    И пару процедур
     

     

    procedure AllHitTrue (Control: TControl);

    var I: Integer;
    begin
    if Control.ControlsCount > 0 then begin
       for I := 0 to Control.ControlsCount - 1 do begin
          TControl(Control).Controls.HitTest:= True;
          AllHitTrue(Control.Controls);
       end;
    end;
    end;
     
    procedure AllHitFalse (Control: TControl);
    var I: Integer;
    begin
    if Control.ControlsCount > 0 then begin
       for I := 0 to Control.ControlsCount - 1 do begin
          TControl(Control).Controls.HitTest:= False;
          AllHitFalse(Control.Controls);
       end;
    end;
    end;

    Для PresentedScrollBox у меня пока не работает.

  2. Если по примеру GPStyle

    Вариант 1. Изначальный:
    Горизонтальный скроллинг работает. вертикальный работает

    Вариант 2. Без TFormGP.ListView1Gesture
    Горизонтальный скроллинг работает. Вертикальный работает. Т.е нет никакой разницы с вариантом 1

    Вариант 3. С TFormGP.ListView1Gesture, и отключенным TouchTracking у PresentedScrollBox (Родитель)
    Горизонтальный скроллинг работает. Вертикальный не работает.

    Мне то как раз нужно чтобы оба скроллинга крутились (с инертными движениями). Оно и работает, но только конкретно с этим компонентом.
    Вот я и хочу понять - где и почему. Чтобы попробовать на других компонентах со скроллингом.

  3. Ясно) буду разбираться.

    Я просто просто пробовал сам TListViewHorz и искал непосредственно в функциях компонента, потому что вроде как и без Gesture работало


    UPD

    Убрал TFormGP.ListView1Gesture Скроллинг работает точно также.
    Сама процедура, кстати похожа на ту, о которой я писал в первом сообщении в теме, как о дельном варианте, но без AniCalculations.
    Поэтому "сквозной скроллинг" где-то в компоненте реализуется. Пока не разобрался (((

  4. Хорошо, подождём)
    А сам компонент где можно будет найти?

    А вообще передача касаний и вычисление прокрутки между объектами как-нибудь решается?

    Пробовал отключать Pan для внутренних скроллов по событиям TAniClaculations.OnStart
    Оно срабатывает, но пока палец не отпустишь - эффекта не дает.

  5. День добрый, господа!

    Пытаюсь реализовать довольно простую вещь с точки зрения функциональности интерфейса для мобильных устройств. А именно:
    В вертикально прокручиваемом блоке расположить блоки с горизонтальной прокруткой содержимого. Примерно как сейчас это выглядит в Гугл Плей.
    Но получается некоторая фигня, так как внутренние блоки (с горизонтальной прокруткой) перекрывают вертикальную прокрутку родителя.
    Причем когда начинаешь играться со свойствами скролбоксов, от результата немного мозг подтекает


    Пробовал различные варианты комбинаций свойств HitTest и igiPan (стоит по умолчанию) для внутренних скролов.
    Поведение несколько меняется (в том числе и где происходит касание внутри скролов - на объектах или на пустом месте), но необходимый эффект не достигается.

    Самый дельный вариант получается если передавать изменение Y-координат в событии OnGesture igiPan на объектах (!) внутри скроллов и переносить их на Viewport вертикального скролла. Но в таком случае не работает AniCalculations. При некоторых вариантах можно также  выставить HitTest - Fasle объектам внутри горизонтальных скроллов. Скроллы  начинают работать, но тогда теряется доступ к объектам.

    https://cloud.mail.ru/public/BYZ7/w957wUHEN

×
×
  • Создать...