Canvas и кнопки мыши

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Art
незнакомец
Сообщения: 4
Зарегистрирован: 28.01.2022 16:45:44

Canvas и кнопки мыши

Сообщение Art »

Lazarus 2.0.12, OS Win7
Вся программа состоит только из формы и процедур mouseUp, mouseDown и mouseMove.

Если для рисования линии очень быстро переместить мышь с левой кнопкой мыши за пределы канвы, то рисует нормально до края. Если же это делать с правой кнопкой, то рисуется короткая линия, заканчивающаяся далеко от края канвы.
И ещё.
Если отпустит левую кнопку за пределами канвы - mouseUp срабатывает, а для правой кнопки - нет.

Подскажите, пожалуйста, как упросить правую кнопку работать аналогично левой.
Описание в сети подобного поведения мыши мне найти не удалось.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Для начала проверить саму мышку и драйвера от нее. У одной сотруднице на работе недавно мышка в Excel делала Turbo Fire, потому что микрик на плате кнопки износился. Перепаял и все стало как из магазина работать.
PS: Переключить мышь на режим для левши, посмотри как будет работать.
Art
незнакомец
Сообщения: 4
Зарегистрирован: 28.01.2022 16:45:44

Сообщение Art »

Sharfik, спасибо.
Поменял в настройках ОС назначения кнопок мышки - проблема теперь стала на левой кнопке.
Поменял несколько мышек - всё то же
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Art писал(а):Sharfik, спасибо.
Поменял в настройках ОС назначения кнопок мышки - проблема теперь стала на левой кнопке.
Поменял несколько мышек - всё то же

Значит точно программная проблема.
Art
незнакомец
Сообщения: 4
Зарегистрирован: 28.01.2022 16:45:44

Сообщение Art »

Ещё упростил код для эксперимента - одна процедура FormMouseDown и в ней строка Caption:=IntToStr(X);
Больше ничего нет.
Если катать мышку без нажатых кнопок или с нажатыми правой или средней, то пишет координаты, не выходящие за размеры формы. Если же нажать левую кнопку то пишет координаты и при перемещении за форму.
Попробовал совсем свежую версию Lazarus - проблема осталась.
Просьба, у кого найдётся время, обратите внимание на ваши программы, может ещё у кого-нибудь есть похожая ситуация.
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 565
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

Art писал(а):Если катать мышку без нажатых кнопок или с нажатыми правой или средней, то пишет координаты, не выходящие за размеры формы. Если же нажать левую кнопку то пишет координаты и при перемещении за форму.

Это нормальное поведение по-умолчанию. Захватывается только основная кнопка мыши. После выхода за пределы компонента событие MouseLeave не наступит, так как не придет месседж/сигнал об этом пока не будет отжата основная кнопка(впрочем оно не наступит и потом, до самого возвращения мыши на форму). Таким образом координаты будут ловиться по всему экрану вне зависимости от того, что находится под курсором мыши, а так же сработает событие MouseUp когда кнопка будет отпущена.
В случае с остальными кнопками - за пределами компонента мышка "потеряется", наступит событие MouseLeave.
Art
незнакомец
Сообщения: 4
Зарегистрирован: 28.01.2022 16:45:44

Сообщение Art »

WAYFARER, спасибо.
Тогда появился другой вопрос.
Как-то можно правую кнопку мыши заставить работать как и левая, например программно?
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 565
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

Art, ты лучше напиши подробнее что именно ты пытаешься сделать, так проще будет что то посоветовать.

Но вообще в целом как вариант можно попробовать обрабатывать событие на TForm, на котором расположен компонент на котором рисуешь, тогда мышь теряться не должна (это справедливо для *nix систем, думаю и для Windows будет так же).
Еще как вариант менять кнопки местами по нажатию. Или использовать хуки.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Art писал(а):Как-то можно правую кнопку мыши заставить работать как и левая, например программно?

Было кучу статей под Delphi на тему прехвата нажатия клавишь нажатых в системе и их эмуляции.
Ответить