• 0
ophion

Запрет нажатия на контролы внутри ScrollBox при прокручивании

Вопрос

Добрый день.

В рантайме создаются TButton и помещаются в TVertScrollBox.

Если во время прокручивания нажать пальцем на TButton, то срабатывает событие OnClick.

Собственно вопрос... как избежать такого поведения? Т.е. как разрешить нажатие на кнопки только после того, как прокручивание остановилось?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

10 ответов на этот вопрос

  • 0

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

 

я делал это переписыванием в исходниках контрола событий onmousedown onmousemove onmouseup. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

для мобильных устройств есть специальное событие OnTap

 

в случае с комбобокс оно не поможет а вот для кнопок самое то

Kitty, enatechno и zairkz понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Судя по всему "решения из коробки" нет.

Будем писать костыли... но считаю что наличие такой возможности по умолчанию для TScrollBox было бы не лишним.

Спасибо за ответы.

Тема открыта, может кто-то сталкивался с такой ситуацией. Не ленитесь делится опытом и кодом тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

У TVertScrollBox есть AniCalculations.

 

Можно попробовать:

 

AniCalculations.Animation := true;

 

и сделать обработчики на события:

 
AniCalculations.OnStart - TButton.Enabled := false

AniCalculations.OnStop - TButton.Enabled := true

Изменено пользователем Кирилл

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Используйте 

 

Судя по всему "решения из коробки" нет.

Будем писать костыли... но считаю что наличие такой возможности по умолчанию для TScrollBox было бы не лишним.

Спасибо за ответы.

Тема открыта, может кто-то сталкивался с такой ситуацией. Не ленитесь делится опытом и кодом тут.

Вам же написали, используйте OnTap прекрасно работает, не мешает при скроле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Используйте 

 

Судя по всему "решения из коробки" нет.

Будем писать костыли... но считаю что наличие такой возможности по умолчанию для TScrollBox было бы не лишним.

Спасибо за ответы.

Тема открыта, может кто-то сталкивался с такой ситуацией. Не ленитесь делится опытом и кодом тут.

Вам же написали, используйте OnTap прекрасно работает, не мешает при скроле.

Вы хотите сказать что это не костыль?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вы хотите сказать что это не костыль?

использовать специальное событие это костыль? на windows это событие не отловить, т.к. это для мобильных платформ

Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

 

Используйте 

 

Судя по всему "решения из коробки" нет.

Будем писать костыли... но считаю что наличие такой возможности по умолчанию для TScrollBox было бы не лишним.

Спасибо за ответы.

Тема открыта, может кто-то сталкивался с такой ситуацией. Не ленитесь делится опытом и кодом тут.

Вам же написали, используйте OnTap прекрасно работает, не мешает при скроле.

Вы хотите сказать что это не костыль?

 

Какой же костыль)), костыль это при клике запускать таймер и если изменился фокус в течении секунды тогда что то делать, типа того, вот это костыль))

Tap - Нажатие

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

You can set HitTest = false for all controls to be inserted. Then you can scroll easyly. But you should handle Scrollbox.OnTap by yourself. Calculate which control is at tap coordinates, Then call tap handler of this control.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: ivadimos
      Хочу написать итем пикер на основе скроллбокса(листобокса, тут не суть важна),
      выглядеть он должен так, обычный скролл, но в области видимости только 5 элементов. 3й элемент(цетральный) как бы выделен(на его уровне вне листбокса лежит прямоугольник, который его типа подсвечивает). В чём проблема.
      всё работает красиво, но хотелось бы, что бы при окончании скроллинга происходило приближение к элементу, чья  позиция ближе всего к позиции, которую подсвечивает прямоугольник. 

    • Автор: dreamix
      День добрый, господа!

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

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

      Самый дельный вариант получается если передавать изменение Y-координат в событии OnGesture igiPan на объектах (!) внутри скроллов и переносить их на Viewport вертикального скролла. Но в таком случае не работает AniCalculations. При некоторых вариантах можно также  выставить HitTest - Fasle объектам внутри горизонтальных скроллов. Скроллы  начинают работать, но тогда теряется доступ к объектам. https://cloud.mail.ru/public/BYZ7/w957wUHEN
    • Автор: Евгений Корепов
      Delphi XE8, Android.
      Пишу слайдер картинок. Задачу себе поставил аналогичную слайдеру Ввконтакте. Т.е. Жестами листаем налево/направо, двойной клик увеличение, повторный двойной клик уменьшение, ну и пальцами можно растягивать изображения.
       
      Все работало замечательно до момента добавления анимации. Слайд (TImage) лежит в TScrollBox. Анимация увеличения (FloatAnimation) тоже отлично работает. 
      Но позиционирование картинки сделать не могу с анимацией, анимацию не могу привязать к ViewportPosition. В итоге, при увеличении картинки, не область по которой ткнули, а по уродски - левый верхний угол остаётся зафиксированным, увеличивается вправо и вниз.
       
      Как можно связать FloatAnimation и ViewportPosition ?
    • Автор: Tarik02
      Как реализовать плавный скроллинг в ScrollBox. Скроллинг програмный(ScrollTo). Я хотел бы примерно такую анимацию, что сначало скорость мала, потом чуть больше, и на конец снова мала. Но это не обязательно.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу