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

07.06.21

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

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

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

Наименование Файл Версия Размер
MagicEsc.zip
.zip 15,88Kb
56
.zip 15,88Kb 56 Скачать

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

Перем 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;

См. также

HTTP сервер 1С 7.7 + HTTP асинхронный клиент: внешние компоненты для 1С 7.7

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

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

2000 руб.

27.05.2022    7811    20    13    

31

Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.

Разработка внешних компонент Платформа 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    4799    1    0    

3

Выбор из большого списка (для 1С 7.7)

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

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

1200 руб.

02.12.2021    5777    2    19    

4

Форма для ввода количества товаров

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

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

1200 руб.

08.09.2021    7390    0    2    

1

Внешняя компонента для преобразования файлов из/в кодировку Base64 в 1С 7.7

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

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

10 стартмани

06.04.2021    9446    14    softmaker    12    

5

Криптография: внешняя компонента для 1С 7.7

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

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

1 стартмани

08.06.2020    9050    27    mdbruyfn    10    

9

Протокол UDP: внешняя компонента для 1С 7.7

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

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

1 стартмани

23.05.2020    7318    5    mdbruyfn    0    

6
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SiAl 76 07.01.12 07:56 Сейчас в теме
2. tango 506 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 3958 09.01.12 08:10 Сейчас в теме
(9),(10)
Мужики, вы тут такие умные, а мы с Ерохой дураки, не проверили.
А теперь попробуйте вот так:
Процедура Сформировать()
До=1000000;
Для А=1 По До Цикл
Состояние(""+А+ "из "+До);
КонецЦикла;
КонецПроцедуры

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

Открываем обработку, жмем Esc - все класс!, пишет, что нажата, не обрабатывает.
Жмем Сформировать, уходим в цикл. Жмем Ecs - получаем, что на картинке.
Насколько помню, ИМЕННО О ЦИКЛЕ вопрос стоял, а не ВООБЩЕ
Прикрепленные файлы:
Ёпрст; +1 Ответить
12. CheBurator 3119 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 3958 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 3958 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 3958 09.01.12 14:51 Сейчас в теме
(17) Думаешь я название темы смотрел? :))))
20. Поручик 4670 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. Поручик 4670 12.01.12 00:48 Сейчас в теме
Не заметил, уже говорили про эту ВК. Впрочем глюков у меня с ней не было, свои задача она выполняла.
23. hogik 443 12.01.12 00:56 Сейчас в теме
(21)
Пока писал (22) появилось (21) сообщение.
Тогда, можно читать в (22) сообщении только последнюю строчку... :-)
Оставьте свое сообщение