![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Всем привет
![]() Есть графический компонент, изображающий круглую кнопку. Нужно добиться того, чтобы он реагировал на такие события, как: 1) нажатие левой кнопки мыши, 2) отпускание той же кнопки, 3) наведение и 4) снятие указателя. Код:
В процедуре DoMouseLeft проверяется, находится ли указатель мыши в пределах окружности - контура кнопки: Код:
При тестировании программы обнаружил, что кнопка вообще не реагирует на сообщение WM_MOUSELEAVE, ЗАТО прекрасно слушается сообщения WM_MOUSEMOVE, когда указатель мыши выходит за пределы круга, обозначающего кнопку. В чём может быть дело? Подскажите, пожалуйста, в чём моя ошибка. Заранее благодарен за Ваше внимание ![]() |
#2
|
||||
|
||||
![]() Не проще обработать все сообщения в WndProc компонента?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Lothlorien (13.02.2012)
|
#3
|
||||
|
||||
![]() Таким методом раньше не пользовался (нехватка знаний и опыта
![]() Если можно, опишите вкратце, какие преимущества это даёт, а дополнительные сведения по этой теме уже постараюсь найти самостоятельно ) |
#4
|
||||
|
||||
![]() Будут доступны ВСЕ сообщения приходящие окну и их не потребуется дополнительно описывать.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Lothlorien (13.02.2012)
|
#5
|
||||
|
||||
![]() Понял, развернусь в этом направлении ))
Но всё же - почему контрол может не реагировать на WM_MOUSELEAVE? |
#6
|
||||
|
||||
![]() Нужно видеть код компонента, чтобы сказать это.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
![]() Код:
fActive - переменная, эквивалентна fEnabled (но контрол остаётся Enabled постоянно, просто изменяется его внешний вид). fFace - вид кнопки в "состоянии покоя". Края залиты синим цветом RGB 0,0,255, он установлен как прозрачный цвет и невидим (мы видим лишь круглую область) |
#8
|
||||
|
||||
![]() Я говорил про код компонента, а не процедуры в него входящей.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
![]() Извиняюсь
![]() Код:
Графика кнопки загружается из res-файла. Кнопки различаются цветовой гаммой, которая указывается в свойстве Path (например, 'RBT_RED'). |
#10
|
||||
|
||||
![]() Контрол TSpeedButton также как и TImage основан на классе TGraphicControl, но там нужные мышинные события уже реализованы. Можно взять его за основу или посмотреть сам принцип реализации.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Lothlorien (13.02.2012)
|
#11
|
||||
|
||||
![]() Да, TSpeedButton удобен в этом случае, но мои тараканы в голове требуют именно круглый контрол
![]() Раньше я уже использовал подобный подход в самодельной игрушке; там, как ни странно, контролы прекрасно реагировали на все действия мышью... хотя код тот же самый ![]() Словом, буду разбираться с внутренностями TSpeedButton, авось наткнусь на решение своей задачи ![]() |
#12
|
||||
|
||||
![]() Не изобретайте велосипед, посмотрите архив.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Lothlorien (13.02.2012)
|
#13
|
||||
|
||||
![]() Преогромнейшее Вам спасибо
![]() |