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

07.06.21

Разработка - Разработка внешних компонент

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
MagicEsc.zip
.zip 15,88Kb
57
57 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

Методы:

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

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

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

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

MAG.DisableEsc();

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

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

КонецЦикла;

MAG.EnableEsc();

 

Начиная с версии 2.x.x.x добавлены методы работы с экраном.

 

Save(<Режим>,<Лево>,<Верх>,<Ширина>,<Высота>,<ИмяФайла>,<Флаг2>)

Назначение:

Сохраняет область экрана в файл (формат BMP) или в оперативную память.

Параметры:

<Режим> - Позволяет задать относительно чего используются координаты области:

0 - Относительно рабочего стола Windows.

-1 - Относительно основного окна 1С.

Число (отличное от 0 или -1) - Относительно формы. В качестве значения необходимо передать HWND окна формы, которое можно получить с помощью объекта "РасширениеФормы" или "АтрибутФормы" из атрибута (свойства) "Дескриптор" внешней компоненты FormEx™.

<Лево> - Расстояние от левой границы стола/окна/формы до левой границы области.

<Верх> - Расстояние от верхней границы стола/окна/формы до верхней границы области.

<Ширина> - Ширина области.

<Высота> - Высота области.

<ИмяФайла> - Строковое выражение с именем файла. Если не задано, область сохраняется в оперативной памяти.

<Флаг2> - Управляет контролем полной видимости области на экране. Если задано значение отличное от нуля, то контроль отключается.

Возвращает:

<0 - Операция не выполнена.

=0 - Никогда не возвращается.

>0 - Успешное завершение.

Compare(<Режим>,<Лево>,<Верх>,<Ширина>,<Высота>,<Флаг1>,<Флаг2>)

Назначение:

Сравнивает образ, заданный в параметрах вызова данного метода, с образом (ранее сохраненного методом "Save") в оперативной памяти.

Параметры:

<Режим>,<Лево>,<Верх>,<Ширина>,<Высота>,<Флаг2> - Описание эквивалентно описанию параметров метода "Save".

<Флаг1> - Управляет удалением образа (ранее сохраненного методом "Save") из оперативной памяти. Если задано значение отличное от нуля, то образ не удаляется из оперативной памяти до очередного вызова метода "Save" или до завершения сессии 1С. В противном случае (нулевое значение или отсутствует) образ удаляется после выполнения метода "Compare".

Возвращает:

<0 - Операция не выполнена.

=0 - Образ (ранее сохраненный методом "Save") отличается от образа определенного координатами вызова метода "Compare".

>0 - Образ (ранее сохраненный методом "Save") равен образу определенного координатами вызова метода "Compare".

GetRetCod()

Назначение:

Возвращает значение уточняющего кода возврата, если из методов "Save" и "Compare" вернулось значение меньше нуля. Предыдущее значение уточняющего кода возврата сбрасывается в начале выполнения всех методов, кроме "GetRetCod". Значение уточняющего кода возврата сбрасывается после выполнения "GetRetCod".

Параметры:

Нет параметров.

Возвращает:

0 - Нет причин для установки значения уточняющего кода возврата.

1-5 - Системные проблемы. Следует обратиться к разработчику MagicEsc.

6-16 - Сбой при записи файла в методе "Save", заданного параметром <ИмяФайла>.

17 - В параметр <Режим> передан неверный HWND окна формы.

18-21 - Системные проблемы. Следует обратиться к разработчику MagicEsc.

22 - В параметр <Режим> передан неверный HWND окна формы.

23-30 - Область не имеет полной видимости на экране, а значение параметра <Флаг2> равно нулю или параметр отсутствует.

31 - Системные проблемы. Следует обратиться к разработчику MagicEsc.

32 - Площадь образа (ранее сохраненного методом "Save") отличается от площади образа определенного координатами в вызове метода "Compare". Или образ отсутствует в оперативной памяти.

33-35 - Системные проблемы. Следует обратиться к разработчику MagicEsc.

SetDebug(<Уровень>)

Назначение:

Позволяет управлять уровнем выдачи отладочной информации.

Параметры:

<Уровень> - Позволяет задать уровень детализации выдаваемой отладочной информации.

<0 - Отключает выдачу отладочной информации.

=0 - Отключает выдачу отладочной информации.

>0 - Включает выдачу отладочной информации. Минимальный уровень детализации - единица. Если уровень задан более допустимого в MagicEsc, то используется максимально возможный.

Возвращает:

Ничего не возвращает - вызывается как процедура.

GetTextSize(<Режим>,<Шрифт>,<Текст>)

Назначение:

Позволяет получить ширину и высоту текста в пикселях.

Параметры:

<Режим> - Описание эквивалентно описанию параметра метода "Save".

<Шрифт> - Задаёт шрифт, которым планируется отображать текст. В качестве значения необходимо передать значение из атрибута (свойства) "Шрифт" объекта "АтрибутФормы" внешней компоненты FormEx™.

<Текст> - Задаёт текст, который планируется отображать.

Возвращает:

<0 - Операция не выполнена.

=0 - Передан текст нулевой длины.

>0 - Успешное завершение. Возвращаемая величина будет содержать ширину текста в пикселях - как целое от деления на 10000, а высоту текста в пикселях - как остаток от деления на 10000. Пример: SizeX=Цел(RetVal/10000); SizeY=RetVal%10000;

См. также

Разработка внешних компонент Системный администратор Программист Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Россия Платные (руб)

Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.

7200 руб.

19.04.2023    5254    1    0    

3

Разработка внешних компонент WEB-интеграция Программист Платформа 1С v7.7 Конфигурации 1cv7 Платные (руб)

Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и даже, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async или синхронный клиент HTTP для 1С 7.7 (публикация № 1152364) можно наладить обмен данными между удаленными информационными базами. С помощью компоненты HTTP_Async можно сначала послать несколько запросов к сайтам, веб-сервисам (в т.ч. к HttpSrv7), а затем обрабатывать данные по мере их поступления. Компонента GISMT в дополнение к HTTP_Async имеет функцию цифровой подписи и, таким образом, имеет все возможности для работы с API ГИС МТ "Честный знак" непосредственно из среды 1С 7.7.

2000 руб.

27.05.2022    8837    23    17    

34

Разработка внешних компонент Программист Платформа 1С v7.7 Платные (руб)

Компонента для выбора значения из больших списков значений.

1200 руб.

02.12.2021    6229    2    19    

4

Разработка внешних компонент Оптовая торговля Программист Пользователь Платформа 1С v7.7 Конфигурации 1cv7 Управленческий учет Платные (руб)

Расширяем уровень взаимодействия c пользователем с помощью новых возможностей - форма для ввода количества для перемещений и форма ввода количества с упаковками и штуками.

1200 руб.

08.09.2021    7581    0    2    

1

Разработка внешних компонент Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

10 стартмани

06.04.2021    9978    14    softmaker    13    

5

Разработка внешних компонент Защита ПО и шифрование Программист Платформа 1С v7.7 Абонемент ($m)

Цифровые подписи, шифрование, просмотр сертификатов ключей ЭЦП, работа с различными криптопровайдерами (в т.ч. КриптоПРО ГОСТ 2012) в 1С 7.7.

1 стартмани

08.06.2020    9406    28    mdbruyfn    10    

9

Разработка внешних компонент Программист Платформа 1С v7.7 Абонемент ($m)

Обмен сообщениями и небольшими файлами по протоколу UDP с 1С и внешними приложениями в локальной сети или сети VPN.

1 стартмани

23.05.2020    7575    7    mdbruyfn    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SiAl 76 07.01.12 07:56 Сейчас в теме
2. tango 546 07.01.12 14:22 Сейчас в теме
а что только 7.7? разве ВК под 8х не взлетит?
3. hogik 443 07.01.12 18:36 Сейчас в теме
(2)
Михаил (tango).
А разве в 8.х еще не сделана такая возможность на уровне платформы?
Технологии в ней уже новые... :-)
4. zk96 07.01.12 22:39 Сейчас в теме
Внешняя компонента только для одного - для перехвата нажатии одной единственной клавиши? Как-то не кошерно это :-)
5. hogik 443 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 443 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 443 09.01.12 00:07 Сейчас в теме
(9)
Ваня (zk96).
Проверил. Да - ловит FormEx клавишу.
Видимо, ТОГДА у меня руки и голова были кривее чем сейчас.
Но, т.к. я не использую FormEx и задача была не совсем в написании данной ВК, то немного себя оправдаю. Думаю, пусть эта ВК лежит на сайте - может кто еще не использует FormEx... ;-)
11. hogik 443 09.01.12 03:39 Сейчас в теме
(9)
Ваня (zk96).
Эх. Зацепила меня "проблема" собственной "криворукости" в FormEx. ;-)
Суть нашего диалога похожа на: "Чего вы мучаетесь в "семерке"? Это ВСЁ в "восьмерке" уже есть".
Т.е. ВАША "жизнь" начинается с текущей точки времени. А прошлой жизни других людей - для ВАС не существует.
Мои пользователи начали давить на клавишу Esc в районе 2000 года. Тогда мне не хватило мозгов сделать перехват клавиши в ВК - не получилось. Пришлось придумать и реализовать в срочном порядке, ровным слоем, во всей конфигурации "логическое отслеживание" нажатия. Вроде, тогда еще не было FormEx-а? ;-) А с появлением этой разработки, я попробовал её. Система стала сильно зыбкой, даже и не в вопросе перехвата (блокировки) - до этого, просто, и дело не дошло. Отказался. В районе 2005 года попробовал еще раз. Перехват (блокировка) клавиши, как Вы написали в (9) сообщении, НЕ работал.
А т.к. меня мало волновала "внешняя форма" моей системе, то я больше и не возвращался к попыткам использовать FormEx. Т.к. ВСЁ, что могла мне дать эта разработка, было давно реализовано штатными средствами. Да и задачи были совсем другие: отказ от монопольных (регламентных) работ, обеспечение устойчивой работы системы в режиме 24х7 и т.д. Т.е. мы занимались не "вершками", а "корешками". ;-)

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

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

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

Открываем обработку, жмем Esc - все класс!, пишет, что нажата, не обрабатывает.
Жмем Сформировать, уходим в цикл. Жмем Ecs - получаем, что на картинке.
Насколько помню, ИМЕННО О ЦИКЛЕ вопрос стоял, а не ВООБЩЕ
Прикрепленные файлы:
Ёпрст; +1 Ответить
12. CheBurator 2712 09.01.12 08:03 Сейчас в теме
Для блокировки эскейпа использовал какую-то другую, не формекс, ВК. работала нормально.
19. hogik 443 09.01.12 17:58 Сейчас в теме
(12)
Сергей.
Использовал? Т.е. теперь - FormEx.?
Я тоЖ использовал: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=925
Но, т.к. тогда был "зверинец" с версиями ОС-а, то имел глюки. Отказался от этой ВК.
(15)
Ваня (zk96).
Вы написали: "значит Ваша компонента полезна и кому-то облегчила жизнь. "(с)
Она, даже, и мне бесполезна и не облегчит жизнь.
Вы только начали в 2008 году работать с 1С, а я в этом же году уже закончил... :-))))))))
14. Abadonna 3968 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) в 2005 году я писал на другом языке и 1С не использовал. Но в 2008 перехват работал.
Еще раз повторюсь, Каждый в праве принимать решение сам как ему это делать.
Можо увидеть по скачиваниям, если скачали несколько человек, не пожалели свои $money, значит Ваша компонента
полезна и кому-то облегчила жизнь.
P.S. Интересный получился диспут :-)
С Рождеством Христовым!!!
16. Abadonna 3968 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 3968 09.01.12 14:51 Сейчас в теме
(17) Думаешь я название темы смотрел? :))))
20. Поручик 4692 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	
Показать

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