gifts2017

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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