• 0
ophion

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

Вопросы

Добрый день.

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

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

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

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


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

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

  • 0

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

 

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

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


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

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

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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 это событие не отловить, т.к. это для мобильных платформ

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу