C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Разница событий от мыши, нажата правая или левая кнопка и перемещ
Grigoriy
Отправлено: 08.07.2006, 05:48


Мастер участка

Группа: Участник
Сообщений: 381



Есть одна особенность механизма возникновения событий от мыши.

Эта особенность в том, что если во время нажатия левой кнопки мыши курсор был над заданным компонентом и затем курсор мыши перемещается при нажатой левой кнопке, то ДАЖЕ ТОГДА, КОГДА КУРСОР УЙДЕТ ЗА ГРАНИЦЫ КОМПОНЕНТА — СОБЫТИЯ О ПЕРЕМЕЩЕНИИ МЫШИ ВСЕ РАВНО БУДУТ ПОСТУПАТЬ.

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

Я эту мысль веду к тому, что, например, в Windows Commander файлы могут выделяться правой кнопкой мыши и даже когда курсор мыши уходит за пределы окна этой программы, то выделение файлов может продолжаться, если список не полностью занимает панель и часть его находится внизу.

Как обойти этот тупик ?
olegenty
Отправлено: 08.07.2006, 06:25


Ветеран

Группа: Модератор
Сообщений: 2412



SetCapture, GetCapture, ReleaseCapture, WM_CAPTURECHANGED
Grigoriy
Отправлено: 09.07.2006, 06:40


Мастер участка

Группа: Участник
Сообщений: 381



Спасибо, olegenty.

Вот только очередная особенность работы мыши или драйвера мыши.

В общем последовательность действий такова была:
1) нажимаем правую кнопку мыши
2) вызываем SetCapture(Form1->Panel14->Handle);
3) переводим курсор мыши за пределы Form1->Panel14
4) нажимаем левую кнопку мыши
5) отпускаем левую кнопку мыши
6) отпускаем правую кнопку мыши — событие не передается !
Последнее событие не передается.

Ещё особенность.

Если вызвать SetCapture и не удерживать никакуб кнопку мыши нажатой, то событие перемещения мыши поступает только тогда, когда курсор находится в пределах формы, имеющей фокус ввода. А если удерживать кнопку нажатой и вызвать SetCapture, то сообщение перемещения поступает при любой координате курсора мыши на экране. Если нажать левую кнопку — сбрасывается...

Отредактировано Grigoriy — 09/07/2006, 06:41

Вернуться в Вопросы программирования в C++Builder