![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Всем привет
![]() Есть графический компонент, изображающий круглую кнопку. Нужно добиться того, чтобы он реагировал на такие события, как: 1) нажатие левой кнопки мыши, 2) отпускание той же кнопки, 3) наведение и 4) снятие указателя. Код:
procedure DoMouseOver(var Msg: TWMMouse); message WM_MOUSEMOVE; procedure DoMouseLeft(var Msg: TWMMouse); message WM_MOUSELEAVE; procedure DoMouseDown(var Msg: TWMMouse); message WM_LBUTTONDOWN; procedure DoMouseUp(var Msg: TWMMouse); message WM_LBUTTONUP; В процедуре DoMouseLeft проверяется, находится ли указатель мыши в пределах окружности - контура кнопки: Код:
if ((sqrt(sqr(Width div 2 - Msg.XPos) + sqr(Height div 2 - Msg.YPos))) <= Width div 2) then {... указатель находится в пределах контура} else {... "притворяемся", что указатель не наведён на кнопку} При тестировании программы обнаружил, что кнопка вообще не реагирует на сообщение 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 в.д. |