![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 компонента?
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Lothlorien (13.02.2012)
| ||
|
#3
|
||||
|
||||
|
Таким методом раньше не пользовался (нехватка знаний и опыта
)...Если можно, опишите вкратце, какие преимущества это даёт, а дополнительные сведения по этой теме уже постараюсь найти самостоятельно ) |
|
#4
|
||||
|
||||
|
Будут доступны ВСЕ сообщения приходящие окну и их не потребуется дополнительно описывать.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Lothlorien (13.02.2012)
| ||
|
#5
|
||||
|
||||
|
Понял, развернусь в этом направлении ))
Но всё же - почему контрол может не реагировать на WM_MOUSELEAVE? |
|
#6
|
||||
|
||||
|
Нужно видеть код компонента, чтобы сказать это.
|