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

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

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

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

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

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

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

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

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

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

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

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

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

Наименование Файл Версия Размер Кол. Скачив.
ВводМышью3хЗначений.zip
.zip 6,63Kb
25.12.09
96
.zip 6,63Kb 96 Скачать
ВводМышью4хЗначений.zip
.zip 7,28Kb
25.12.09
61
.zip 7,28Kb 61 Скачать
КнопкиИзТабличныхПолей.zip
.zip 7,25Kb
21.01.10
24
.zip 7,25Kb 24 Скачать
ВводМышью3хЗначенийБезКазуса.zip
.zip 7,23Kb
25.12.09
20
.zip 7,23Kb 20 Скачать

См. также

Лучшие комментарии

3. aspirator 23 (aspirator23) (файл скачал) 16.12.2009 07:32
Интересный механизм.
Обнаружил один казус.
Щелкаешь левой клавишей на ячейке - переключается. Не сходя с ячейки щелкаешь правой клавишей - не переключается.
А вот наоборот работает. Щелкаешь правой клавишей - переключается. Не сходя с ячейки щелкаешь левой клавишей - переключается. Одним словом левая клавиша правильно отрабатывает, а правая только если она сработала первый раз на новой ячейке.
Ответили: (5)
+ 1 [ codmal; ]
# Ответить
4. Иван Коромыслов (BASTARDXY) (файл скачал) 16.12.2009 07:42
Интересно, а есть ли способ отслеживать левую/правую кнопку мыши при нажатии на кнопке
Ответили: (11)
+ 1 [ codmal; ]
# Ответить
6. Алексей Ситников (SiAl) 16.12.2009 10:54
А как отследить щелчок двумя клавишами одновременно?
Ответили: (8) (7)
+ 1 [ codmal; ]
# Ответить

Комментарии

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

Cм. также
ЗапуститьПриложение(winmine.exe)
− 1 [ Dimasik2007; ]
# Ответить
2. Сергей Тучин (SergeyT2006) 16.12.2009 04:12
Будем искать применение.
# Ответить
3. aspirator 23 (aspirator23) (файл скачал) 16.12.2009 07:32
Интересный механизм.
Обнаружил один казус.
Щелкаешь левой клавишей на ячейке - переключается. Не сходя с ячейки щелкаешь правой клавишей - не переключается.
А вот наоборот работает. Щелкаешь правой клавишей - переключается. Не сходя с ячейки щелкаешь левой клавишей - переключается. Одним словом левая клавиша правильно отрабатывает, а правая только если она сработала первый раз на новой ячейке.
Ответили: (5)
+ 1 [ codmal; ]
# Ответить
4. Иван Коромыслов (BASTARDXY) (файл скачал) 16.12.2009 07:42
Интересно, а есть ли способ отслеживать левую/правую кнопку мыши при нажатии на кнопке
Ответили: (11)
+ 1 [ codmal; ]
# Ответить
5. Дмитрий Кондратьев (codmal) 16.12.2009 08:21
(3) Да, это потому что правый щелчок мыши отслеживается только по событию ПриАктивизацииЯчейки, которое происходит при щелчке по любой ячейке, кроме той, что уже активна. А левый щелчок отслеживается ещё и по событию ПередНачаломИзменения, которое происходит и на активной ячейке. Данный приём может пригодиться для быстрого ввода, а при этом не предполагается долго зависать на одной ячейке, поэтому я решил не усложнять алгоритм ради этого казуса.
# Ответить
6. Алексей Ситников (SiAl) 16.12.2009 10:54
А как отследить щелчок двумя клавишами одновременно?
Ответили: (8) (7)
+ 1 [ codmal; ]
# Ответить
7. Сергей Дудаков (Anything) (файл скачал) 16.12.2009 13:25
(6) С помощью таймера и двух флажков.
# Ответить
8. Дмитрий Кондратьев (codmal) 18.12.2009 01:03
(6) Добавил описание того, как отследить щелчок двумя кнопками, и обработку, демострирующую ввод мышью четырёх разных значений.
# Ответить
9. Дмитрий Кондратьев (codmal) 18.12.2009 19:37
Обновил обе обработки: чуток поправил ввод четырёх значений, и пока правил, понял, как упростить ввод трёх значений.
# Ответить
10. Андрей Янакаев (YAN) (файл скачал) 22.12.2009 12:05
Игра практически не отличается от виндового!!! Очень порадовала :D
Ответили: (17)
# Ответить
11. Дмитрий Кондратьев (codmal) 22.12.2009 22:59
(4) Добавил обработку с хитрыми кнопками, выполняющими разные действия по нажатию левой и правой кнопки мыши.
# Ответить
12. Дмитрий Кондратьев (codmal) 25.12.2009 00:17
(3) Добавил обработку ввода щелчком мыши без этого казуса.
# Ответить
13. Дмитрий Кондратьев (codmal) 25.12.2009 00:18
(3) (4) (6) Благодарю за комментарии, послужившие поводом пополнить публикацию.
Ответили: (15)
# Ответить
14. aspirator 23 (aspirator23) (файл скачал) 25.12.2009 07:05
Спасибо за доработку. Теперь мы во всеоружии!
# Ответить
15. Алексей Ситников (SiAl) 25.12.2009 11:49
(13) А щелчки по средней кропке (колесу) отслеживаться в будущем будут?
Ответили: (16)
# Ответить
16. Дмитрий Кондратьев (codmal) 26.12.2009 13:16
(15) В будущем — возможно, а в платформе версии 8.1 я пока не знаю как.
# Ответить
17. Дмитрий Кондратьев (codmal) 21.01.2010 00:55
(10) Выложена новая версия обработки «Сапёр», в которой учтены последние наработки данной публикации. Сходства с виндовым сапёром в ней чуть больше.
# Ответить
19. Александр Коновалов (mpei198) 12.06.2012 11:28
специалльно для ленивых))
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл