gifts2017

Блокировка клавиши Esc ("Прервать выполнение...?") в "1С:Предприятие 7.7"

Опубликовал Владимир (hogik) в раздел Программирование - Практика программирования

Способ блокировки мне рассказал Аркадий (Abadonna), а я только записал его рассказ на С++.

Загрузка в глобальном модуле:

Перем MAG Экспорт;

ЗагрузитьВнешнююКомпоненту("MagicESC.dll");

MAG=СоздатьОбъект("AddIn.MagicEsc");

Методы:

DisableEsc() - блокировать клавишу Esc.

EnableEsc() - разблокировать клавишу Esc.

Повторный вызов одноименного метода не оказывает влияние на состояние блокировки.

Пример использования:

MAG.DisableEsc();

Для Н=1 По 100000 Цикл

     Состояние(Н);

КонецЦикла;

MAG.EnableEsc();

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

Наименование Файл Версия Размер
MagicEsc.zip 30
.zip 13,81Kb
07.01.12
30
.zip 13,81Kb Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Ситников (SiAl) 07.01.12 07:56
2. Михаил Ражиков (tango) 07.01.12 14:22
а что только 7.7? разве ВК под 8х не взлетит?
3. Владимир (hogik) 07.01.12 18:36
(2)
Михаил (tango).
А разве в 8.х еще не сделана такая возможность на уровне платформы?
Технологии в ней уже новые... :-)
4. Ваня (zk96) 07.01.12 22:39
Внешняя компонента только для одного - для перехвата нажатии одной единственной клавиши? Как-то не кошерно это :-)
5. Владимир (hogik) 07.01.12 23:26
(4)
Ваня (zk96).
Вот есть ВК, где не "только для одного": http://dev.1tsm.ru/project/110
Есть еще масса ВК, где нет именно этого - "одного". ;-)
6. Ваня (zk96) 08.01.12 01:52
То, что человек написал свою внешнюю компоненту - это очень хорошо, за это плюс. Достаточно одинэсников которые понятия не имеют, как это сделать.
Но загружать компоненту только ради ОДНОГО действия?
Я использую для блокировки Esc FormEx.
P.S. Эо все сугубо мое личное мнение.
7. Владимир (hogik) 08.01.12 02:06
(6)
Ваня (zk96).
Я напрягал Аркадия этой темой, для вставки "методики" в "кишки" вот этой разработки: http://infostart.ru/public/15211/
Отлаживался на данной DLL-ке. Решил, потом, еще и оформить её отдельной компонентой. Оформил... ;-)
Для собственного интереса - проверьте блокировку (перехват) клавиши Esc в FormEx.
Лет пять-сЭм тому назад, у меня этого не получилось для приведенного примера из данной публикации... ;-)
8. Ваня (zk96) 08.01.12 21:00
Зачем проверять, я ИСПОЛЬЗУЮ это. Обрабатываю событие глобальника ПриНажатииКнопкиКлавиатуры и если установлен флаг БлокироватьESCAPE, то устанавливаю ФСО в ноль.
9. Ваня (zk96) 08.01.12 21:17
Что-то не понятное написал.Лучше приведу код в глобальном модуле(при загруженом 1CPP и FormEx):
Процедура ПриНажатииКнопкиКлавиатуры(КонтекстФормы,КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
Клавиатура = СоздатьОбъект("1cpp.Клавиатура");
Если (Клавиатура.VK_ESCAPE = КодКлавиши)и(БлокироватьESCAPE = 1) Тогда
ФСО = 0;
КонецЕсли;
КонецПроцедуры
БлокироватьESCAPE - это экспортная переменная
P.S. Лично у меня это используется в классе-перехватчике.
10. Владимир (hogik) 09.01.12 00:07
(9)
Ваня (zk96).
Проверил. Да - ловит FormEx клавишу.
Видимо, ТОГДА у меня руки и голова были кривее чем сейчас.
Но, т.к. я не использую FormEx и задача была не совсем в написании данной ВК, то немного себя оправдаю. Думаю, пусть эта ВК лежит на сайте - может кто еще не использует FormEx... ;-)
11. Владимир (hogik) 09.01.12 03:39
(9)
Ваня (zk96).
Эх. Зацепила меня "проблема" собственной "криворукости" в FormEx. ;-)
Суть нашего диалога похожа на: "Чего вы мучаетесь в "семерке"? Это ВСЁ в "восьмерке" уже есть".
Т.е. ВАША "жизнь" начинается с текущей точки времени. А прошлой жизни других людей - для ВАС не существует.
Мои пользователи начали давить на клавишу Esc в районе 2000 года. Тогда мне не хватило мозгов сделать перехват клавиши в ВК - не получилось. Пришлось придумать и реализовать в срочном порядке, ровным слоем, во всей конфигурации "логическое отслеживание" нажатия. Вроде, тогда еще не было FormEx-а? ;-) А с появлением этой разработки, я попробовал её. Система стала сильно зыбкой, даже и не в вопросе перехвата (блокировки) - до этого, просто, и дело не дошло. Отказался. В районе 2005 года попробовал еще раз. Перехват (блокировка) клавиши, как Вы написали в (9) сообщении, НЕ работал.
А т.к. меня мало волновала "внешняя форма" моей системе, то я больше и не возвращался к попыткам использовать FormEx. Т.к. ВСЁ, что могла мне дать эта разработка, было давно реализовано штатными средствами. Да и задачи были совсем другие: отказ от монопольных (регламентных) работ, обеспечение устойчивой работы системы в режиме 24х7 и т.д. Т.е. мы занимались не "вершками", а "корешками". ;-)

Я нашел ТУ версию FormEx-а. Могу выслать... :-)

Ну, а главное написано в (7) сообщении - про цели написания перехвата (блокировки).
12. Сергей (Che) Коцюра (CheBurator) 09.01.12 08:03
Для блокировки эскейпа использовал какую-то другую, не формекс, ВК. работала нормально.
13. Аркадий Кучер (Abadonna) 09.01.12 08:10
(9),(10)
Мужики, вы тут такие умные, а мы с Ерохой дураки, не проверили.
А теперь попробуйте вот так:
Процедура Сформировать()
До=1000000;
Для А=1 По До Цикл
Состояние(""+А+ "из "+До);
КонецЦикла;
КонецПроцедуры

Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО)
Сообщить("Нажата "+КодКлавиши);
// вообще все блокируем
ФСО=0;
КонецПроцедуры

Открываем обработку, жмем Esc - все класс!, пишет, что нажата, не обрабатывает.
Жмем Сформировать, уходим в цикл. Жмем Ecs - получаем, что на картинке.
Насколько помню, ИМЕННО О ЦИКЛЕ вопрос стоял, а не ВООБЩЕ
Прикрепленные файлы:
Ёпрст; +1 Ответить
14. Аркадий Кучер (Abadonna) 09.01.12 08:19
А теперь для тех, кто в танке, поясню:
ФСО обрабатывется в самой 1С, т.е. надо чтобы до дошло событие нажатия.
Когда 1С в цикле - ни хрена до нее не дойдет.
Выход один - этот самый ФСО ставить прямо в call-back хука, что и сделано в методе
DisableKey(КодКлавиши) MiracleV8
И, надеюсь, в (0).

P.S. Справедливости ради надо отметить, что глобальная срабатывает всегда (ГМ)

Процедура ПриНажатииКнопкиКлавиатуры(Конт,КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО)
Сообщить("Нажата "+КодКлавиши);
Если КодКлавиши=27 Тогда
ФСО=0;
КонецЕсли;
КонецПроцедуры

Но тогда будем иметь либо блокировку Esc всегда, либо заводить еще какую-то глобальную переменную и в зависимости от нее этот ФСО менять.
15. Ваня (zk96) 09.01.12 14:34
(14) Abadonna, Вы убедились, что в FormEx перехват ESCAPE работает. Лично я испоьзую его. Выше написал как.
Каждый в праве принимать решение сам как ему это делать.
(11) hogik, в 2005 году я писал на другом языке и 1С не использовал. Но в 2008 перехват работал.
Еще раз повторюсь, Каждый в праве принимать решение сам как ему это делать.
Можо увидеть по скачиваниям, если скачали несколько человек, не пожалели свои $money, значит Ваша компонента
полезна и кому-то облегчила жизнь.
P.S. Интересный получился диспут :-)
С Рождеством Христовым!!!
16. Аркадий Кучер (Abadonna) 09.01.12 14:37
(15)
Abadonna, Вы убедились, что в FormEx перехват ESCAPE работает.


С небольшим нюансом: в 7.7 и только ;)
17. Ваня (zk96) 09.01.12 14:50
(16) Abadonna,
Не понял Ваше замечание, ведь эта тема называется "Блокировка клавиши Esc ("Прервать выполнение...?") в "1С:Предприятие 7.7" "
Здест ведь мы говорили ТОЛЬКО о 7.7. Или нет?
18. Аркадий Кучер (Abadonna) 09.01.12 14:51
(17) Думаешь я название темы смотрел? :))))
19. Владимир (hogik) 09.01.12 17:58
(12)
Сергей.
Использовал? Т.е. теперь - FormEx.?
Я тоЖ использовал: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=925
Но, т.к. тогда был "зверинец" с версиями ОС-а, то имел глюки. Отказался от этой ВК.
(15)
Ваня (zk96).
Вы написали: "значит Ваша компонента полезна и кому-то облегчила жизнь. "(с)
Она, даже, и мне бесполезна и не облегчит жизнь.
Вы только начали в 2008 году работать с 1С, а я в этом же году уже закончил... :-))))))))
20. Сергей Ожерельев (Поручик) 12.01.12 00:42
(0) (6) Как-то давно-давно использовал для этих целей
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=925
Название
 1CUtil.Dll

Назначение
 Блокирование нажатия пользователем кнопки ESC в 1С.   

Методы 
  DisableESC()  - запретить реагирование на нажатие ESC.
  EnableESC() - разрешить реагирование на нажатие ESC	
...Показать Скрыть

До сих пор на винте валяется на всякий случай.
21. Сергей Ожерельев (Поручик) 12.01.12 00:48
Не заметил, уже говорили про эту ВК. Впрочем глюков у меня с ней не было, свои задача она выполняла.
22. Владимир (hogik) 12.01.12 00:52
(20)
Сергей (Поручик).
См. (19) сообщение. Ссылки полностью совпадают. ;-)
А суть моих "изысканий" описана в (7) сообщении (первые три строчки).
23. Владимир (hogik) 12.01.12 00:56
(21)
Пока писал (22) появилось (21) сообщение.
Тогда, можно читать в (22) сообщении только последнюю строчку... :-)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа