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

OnMouseLeave для заполненного ListBox, Windows


Alex7wrt

Вопрос

Добрый день

Столкнулся со следующей задачей, и пока не могу ее решить:

Есть заполненный ListBox, в общем случае он с вертикальной полосой прокрутки. Нужно отработать для него событие OnMouseLeave. Точнее говоря, нужно сделать так, чтобы, когда курсор мыши покидает его пределы, то делаем ListBox.Visible:=False.

Но дело в том, что, во-первых, событие OnMouseLeave в общем случае не сработает, так как в заполненном ListBox-е это событие перехватывается его дочерними элементами, а во вторых вертикальная полоса прокрутки не учитывается в событиях мыши ListBox-а. К тому же, даже если я сделаю какую-нибудь внешнюю рамку, и буду обрабатывать OnMouseLeave для нее, то все равно при быстром движении мыши событие не происходит.

Потому прошу подсказать оптимальный и надежный способ, как сделать ListBox невидимым, когда курсор мыши находится за его пределами.

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

 

 

Изменено пользователем Alex7wrt
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
23 минуты назад, Alex7wrt сказал:

Добрый день

Столкнулся со следующей задачей, и пока не могу ее решить:

Есть заполненный ListBox, в общем случае он с вертикальной полосой прокрутки. Нужно отработать для него событие OnMouseLeave. Точнее говоря, нужно сделать так, чтобы, когда курсор мыши покидает его пределы, то делаем ListBox.Visible:=False.

Но дело в том, что, во-первых, событие OnMouseLeave в общем случае не сработает, так как в заполненном ListBox-е это событие перехватывается его дочерними элементами, а во вторых вертикальная полоса прокрутки не учитывается в событиях мыши ListBox-а. К тому же, даже если я сделаю какую-нибудь внешнюю рамку, и буду обрабатывать OnMouseLeave для нее, то все равно при быстром движении мыши событие не происходит.

Потому прошу подсказать оптимальный и надежный способ, как сделать ListBox невидимым, когда курсор мыши находится за его пределами.

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

 

 

Таймер, эдак милисекунд на 200. И в нем проверять координаты мыши, дальше уже арифметика.

Ссылка на комментарий
  • 0

Спасибо за совет, но это смахивает на костыль ))

И в каком событии проверять координаты?

Кстати, есть ли способ узнать координаты курсора мыши в пределах всей формы с учетом дочерних компонентов?

Изменено пользователем Alex7wrt
Ссылка на комментарий
  • 0
29 минут назад, Alex7wrt сказал:

Спасибо за совет, но это смахивает на костыль ))

И в каком событии проверять координаты?

Кстати, есть ли способ узнать координаты курсора мыши в пределах всей формы с учетом дочерних компонентов?

Проверяйте не в событии, а в таймере. Координаты в глобальной переменной   Screen.MousePos

Ссылка на комментарий
  • 0
24 минуты назад, Alex7wrt сказал:

Да нет, таймер не походит. Нужен прямой подход.

Этот подход прямее некуда. Думаете как контролы генерируют событие OnMouseLeave (Enter)? Точно не посредством колдовства.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

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