Ввод щелчком мыши: правым, левым, двойным

Опубликовал Дмитрий Кондратьев (codmal) в раздел Программирование - Практика программирования

Щёлкая по минному полю «Сапёра» то левой, то правой кнопкой мыши, задумался, как в „восьмёрке” без соответствующих щелчкам мыши событий так же выполнять разные действия то левой, то правой кнопкой мыши. Так можно ускорить многократный ввод в таблицу двух-трёх разных значений, вводя их одним щелчком: одно значение — левым, другое — правым, и третье — двойным, а сами значения выбрав перед началом их ввода.

Суть идеи. В табличном поле и правый, и левый щелчок по ячейке можно отследить по событию ПриАктивизацииЯчейки. А отличить их друг от друга можно по событию ПередНачаломИзменения, установив непосредственный режим редактирования колонок, при котором это событие происходит сразу после активизации ячейки левым щелчком, а после активизации правым — не происходит, т.к. правый обычно вызывает контекстное меню, которое, чтобы не мешалось, можно отключить свойством АвтоКонтекстноеМеню. Ну, а двойной щелчок можно отследить по событию Выбор.

Пример : ВводМышью3хЗначений

Комментарий «А как отследить щелчок двумя клавишами одновременно?» заставил подумать и придумать ещё один способ ввода: щелчок правой кнопкой мыши и затем сразу левой — почти одновременно, но всё же правой чуть раньше, потому что правый щелчок сначала активизирует ячейку, а затем левый щелчок по этой активной ячейке вызывает лишь одно событие — ПередНачаломИзменения, тогда как левый щелчок по неактивной ячейке вызывает два события — ПриАктивизацииЯчейки и ПередНачаломИзменения, что и позволяет отличать левый щелчок от щелчка двумя кнопками.

Пример : ВводМышью4хЗначений

В связи с комментарием «Интересно, а есть ли способ отслеживать левую/правую кнопку мыши при нажатии на кнопке» сварганил кнопки, выполняющие разные действия по нажатию левой и правой кнопки мыши. Принцип действия как и при вводе щелчком мыши в табличное поле, потому что каждая из них сделана из табличного поля.

Пример : КнопкиИзТабличныхПолей

При написании кнопок был устранён казус, упомянутый в комментарии «… Обнаружил один казус. … Не сходя с ячейки щёлкаешь правой клавишей - не переключается. …левая клавиша правильно отрабатывает, а правая только если она сработала первый раз на новой ячейке». Чтобы всегда срабатывал правый щелчок по кнопке, не сходя с единственной ячейки табличного поля, из которого сделана кнопка, при каждом щелчке сбрасывается активная колонка. То же самое сделал и для ввода мышью.

Пример : ВводМышью3хЗначенийБезКазуса

Cм. также : Игра «Сапёр»

Скачать файлы

Наименование Файл Версия Размер
ВводМышью.zip
.zip 29,20Kb
04.04.17
1
.zip 29,20Kb 1 Скачать

См. также

Комментарии
1. Владимир Чередниченко (bazilisa) 15.12.09 21:59 Сейчас в теме
Cм. также : Игра «Сапёр»

Cм. также
ЗапуститьПриложение(winmine.exe)
2. Сергей Тучин (SergeyT2006) 16.12.09 04:12 Сейчас в теме
Будем искать применение.
3. aspirator 23 (aspirator23) 291 16.12.09 07:32 Сейчас в теме
Интересный механизм.
Обнаружил один казус.
Щелкаешь левой клавишей на ячейке - переключается. Не сходя с ячейки щелкаешь правой клавишей - не переключается.
А вот наоборот работает. Щелкаешь правой клавишей - переключается. Не сходя с ячейки щелкаешь левой клавишей - переключается. Одним словом левая клавиша правильно отрабатывает, а правая только если она сработала первый раз на новой ячейке.
4. Иван Коромыслов (BASTARDXY) 16.12.09 07:42 Сейчас в теме
Интересно, а есть ли способ отслеживать левую/правую кнопку мыши при нажатии на кнопке
5. Дмитрий Кондратьев (codmal) 63 16.12.09 08:21 Сейчас в теме
(3) Да, это потому что правый щелчок мыши отслеживается только по событию ПриАктивизацииЯчейки, которое происходит при щелчке по любой ячейке, кроме той, что уже активна. А левый щелчок отслеживается ещё и по событию ПередНачаломИзменения, которое происходит и на активной ячейке. Данный приём может пригодиться для быстрого ввода, а при этом не предполагается долго зависать на одной ячейке, поэтому я решил не усложнять алгоритм ради этого казуса.
6. Алексей Ситников (SiAl) 69 16.12.09 10:54 Сейчас в теме
А как отследить щелчок двумя клавишами одновременно?
7. Сергей Дудаков (Anything) 80 16.12.09 13:25 Сейчас в теме
(6) С помощью таймера и двух флажков.
8. Дмитрий Кондратьев (codmal) 63 18.12.09 01:03 Сейчас в теме
(6) Добавил описание того, как отследить щелчок двумя кнопками, и обработку, демострирующую ввод мышью четырёх разных значений.
9. Дмитрий Кондратьев (codmal) 63 18.12.09 19:37 Сейчас в теме
Обновил обе обработки: чуток поправил ввод четырёх значений, и пока правил, понял, как упростить ввод трёх значений.
10. Андрей Янакаев (YAN) 1353 22.12.09 12:05 Сейчас в теме
Игра практически не отличается от виндового!!! Очень порадовала :D
11. Дмитрий Кондратьев (codmal) 63 22.12.09 22:59 Сейчас в теме
(4) Добавил обработку с хитрыми кнопками, выполняющими разные действия по нажатию левой и правой кнопки мыши.
12. Дмитрий Кондратьев (codmal) 63 25.12.09 00:17 Сейчас в теме
(3) Добавил обработку ввода щелчком мыши без этого казуса.
13. Дмитрий Кондратьев (codmal) 63 25.12.09 00:18 Сейчас в теме
(3) (4) (6) Благодарю за комментарии, послужившие поводом пополнить публикацию.
14. aspirator 23 (aspirator23) 291 25.12.09 07:05 Сейчас в теме
Спасибо за доработку. Теперь мы во всеоружии!
15. Алексей Ситников (SiAl) 69 25.12.09 11:49 Сейчас в теме
(13) А щелчки по средней кропке (колесу) отслеживаться в будущем будут?
16. Дмитрий Кондратьев (codmal) 63 26.12.09 13:16 Сейчас в теме
(15) В будущем — возможно, а в платформе версии 8.1 я пока не знаю как.
17. Дмитрий Кондратьев (codmal) 63 21.01.10 00:55 Сейчас в теме
(10) Выложена новая версия обработки «Сапёр», в которой учтены последние наработки данной публикации. Сходства с виндовым сапёром в ней чуть больше.
19. Александр Коновалов (mpei198) 12.06.12 11:28 Сейчас в теме
специалльно для ленивых))