Lazarus 2.0.12, OS Win7
Вся программа состоит только из формы и процедур mouseUp, mouseDown и mouseMove.
Если для рисования линии очень быстро переместить мышь с левой кнопкой мыши за пределы канвы, то рисует нормально до края. Если же это делать с правой кнопкой, то рисуется короткая линия, заканчивающаяся далеко от края канвы.
И ещё.
Если отпустит левую кнопку за пределами канвы - mouseUp срабатывает, а для правой кнопки - нет.
Подскажите, пожалуйста, как упросить правую кнопку работать аналогично левой.
Описание в сети подобного поведения мыши мне найти не удалось.
Canvas и кнопки мыши
Модератор: Модераторы
Для начала проверить саму мышку и драйвера от нее. У одной сотруднице на работе недавно мышка в Excel делала Turbo Fire, потому что микрик на плате кнопки износился. Перепаял и все стало как из магазина работать.
PS: Переключить мышь на режим для левши, посмотри как будет работать.
PS: Переключить мышь на режим для левши, посмотри как будет работать.
Sharfik, спасибо.
Поменял в настройках ОС назначения кнопок мышки - проблема теперь стала на левой кнопке.
Поменял несколько мышек - всё то же
Поменял в настройках ОС назначения кнопок мышки - проблема теперь стала на левой кнопке.
Поменял несколько мышек - всё то же
Art писал(а):Sharfik, спасибо.
Поменял в настройках ОС назначения кнопок мышки - проблема теперь стала на левой кнопке.
Поменял несколько мышек - всё то же
Значит точно программная проблема.
Ещё упростил код для эксперимента - одна процедура FormMouseDown и в ней строка Caption:=IntToStr(X);
Больше ничего нет.
Если катать мышку без нажатых кнопок или с нажатыми правой или средней, то пишет координаты, не выходящие за размеры формы. Если же нажать левую кнопку то пишет координаты и при перемещении за форму.
Попробовал совсем свежую версию Lazarus - проблема осталась.
Просьба, у кого найдётся время, обратите внимание на ваши программы, может ещё у кого-нибудь есть похожая ситуация.
Больше ничего нет.
Если катать мышку без нажатых кнопок или с нажатыми правой или средней, то пишет координаты, не выходящие за размеры формы. Если же нажать левую кнопку то пишет координаты и при перемещении за форму.
Попробовал совсем свежую версию Lazarus - проблема осталась.
Просьба, у кого найдётся время, обратите внимание на ваши программы, может ещё у кого-нибудь есть похожая ситуация.
Art писал(а):Если катать мышку без нажатых кнопок или с нажатыми правой или средней, то пишет координаты, не выходящие за размеры формы. Если же нажать левую кнопку то пишет координаты и при перемещении за форму.
Это нормальное поведение по-умолчанию. Захватывается только основная кнопка мыши. После выхода за пределы компонента событие MouseLeave не наступит, так как не придет месседж/сигнал об этом пока не будет отжата основная кнопка(впрочем оно не наступит и потом, до самого возвращения мыши на форму). Таким образом координаты будут ловиться по всему экрану вне зависимости от того, что находится под курсором мыши, а так же сработает событие MouseUp когда кнопка будет отпущена.
В случае с остальными кнопками - за пределами компонента мышка "потеряется", наступит событие MouseLeave.
WAYFARER, спасибо.
Тогда появился другой вопрос.
Как-то можно правую кнопку мыши заставить работать как и левая, например программно?
Тогда появился другой вопрос.
Как-то можно правую кнопку мыши заставить работать как и левая, например программно?
Art, ты лучше напиши подробнее что именно ты пытаешься сделать, так проще будет что то посоветовать.
Но вообще в целом как вариант можно попробовать обрабатывать событие на TForm, на котором расположен компонент на котором рисуешь, тогда мышь теряться не должна (это справедливо для *nix систем, думаю и для Windows будет так же).
Еще как вариант менять кнопки местами по нажатию. Или использовать хуки.
Но вообще в целом как вариант можно попробовать обрабатывать событие на TForm, на котором расположен компонент на котором рисуешь, тогда мышь теряться не должна (это справедливо для *nix систем, думаю и для Windows будет так же).
Еще как вариант менять кнопки местами по нажатию. Или использовать хуки.
Art писал(а):Как-то можно правую кнопку мыши заставить работать как и левая, например программно?
Было кучу статей под Delphi на тему прехвата нажатия клавишь нажатых в системе и их эмуляции.
