Имя: Пароль:
1C
 
Обработка нажатия клавиши клавиатуры...
0 Student1983
 
29.01.07
14:09
Как программируется клавиатура? Мне нужно например при нажатии "F4" чтобы пошла какая-нибудь процедура?
Со сканером ве понятно:ОбработкаВнешнегоСобытия()... есть ли для клавы что-то подобное?
1 GrayT
 
29.01.07
14:12
Для F4? Скрытую кнопку с горячей клавишей - не подойдет?
2 Ангел- Хоронитель
 
29.01.07
14:14
(0)Formex - и можешь что угодно на какую угодно клавишу вешать....
3 Ёпрст2
 
29.01.07
14:37
(2) Всё можно и без формекса, как в (1) написано ...
4 Ангел- Хоронитель
 
29.01.07
14:41
(3)ну в примере с F4 да..... но ведь вопрос был вообще про клавиатуру....
5 GrayT
 
29.01.07
14:43
(4)Есть способ повесить практически любую капу в качестве хоткея. Ради этого ФормЕх юзать - из пушки по воробьям
6 kir-g
 
29.01.07
14:47
(5)Если не трудно по подробней
7 GrayT
 
29.01.07
14:57
(С) Alexey Kusiy   где-то в 2001
--------------------------------------------------------------------------------
Известно, что на кнопки в экранных формах V7 можно «вешать» горячие клавиши. Однако количество оных оставляет желать
лучшего – это только Fx с различными модификаторами (alt, ctrl, shift), при чём наиболее привлекательные сочетания
(например, F1) уже зарезервированы системой.
Но всё-таки существует есть способ привязать к кнопкам и иные сочетания клавиш – о нем я и расскажу. Однако этот способ
не относится к стандартным и документированным, поскольку требует непосредственной (минуя конфигуратор) модифиикации форм.

Инструментарий.

Нам потребуется: файловый менеджер FAR, plug-in к нему по имени DocFileBrowser, справочник по кодам клавиш (в смысле,
которые Virtual Keys, VK_), и любой HEX-редактор (можно использовать соответствующую функцию FAR'a).

Сам процесс.

Допустим, у нас есть некий внешний отчёт, на какую-то из кнопок которого мы хотим повесить "хоткей", отличный от
стандартного. Открываем в FAR'e этот отчет через DocFileBrowser и видим, что он в себе набор stream'ов (которые можно
запросто называть файлами, суть одна и та же):

Container.Contents
Container.Profile
Dialog Stream
Inplace description
Main MetaData Stream
MD Programm text
Какой файл к чему относится – я описывать не буду, про это и так неоднократно уже говорилось, тем более, что имена файлов
более чем прозрачны. Да вы и сами все знаете ;-).

Так вот, нам нужен Dialog Stream. Распакуйте его куда-нибудь (простая операция Copy в FAR'e).

Теперь посмотрим, что он из себя представляет – это почти что обычный текстовый файл, за исключением первых трёх байт –
там может быть все, что угодно (на самом деле, там длина файла).

Файл состоит из строчек типа:

{"Закрыть","BUTTON","1342177291","70","142","54",
"14","0","0","4152","",
"#Закрыть","","-1","U","0","0","0","0","0","","",
"","0","-11","0","0","0","0","0","0","0","0","0",
"0","0","0","MS Sans Serif","-1","-1","0",
"Основной","{""0"",""0""}"},  


На самом деле это всё одна строка, просто она разбита разбита для удобства чтения.

Так вот, последние {""0"",""0""} есть ни что иное, как модификатор (первое числовое поле) и Vkey_code назначенной кнопке
горячей клавиши. Причём оба числа десятичные.

Модификатор означает:

0 – нет хоткея,
3 – есть;
+4 – Shift
+8 – Ctrl
+16 – Alt
например, для Alt+Shift+Key модификатор будет 23.
Теперь, зная VK_ нужной нам клавиши (например, 41H = 65 для "A"), мы можем вручную назначить, скажем, кнопке «Закрыть»
хоткей Ctrl+A – для этого заменим ее «хвост» на такой: {""11"",""65""} и со спокойной совестью сохраняем наш файл.

Однако его длина изменилась – поэтому открываем файл каким-нибудь HEX-редактором, и правим: первый байт всегда FF, второй
и третий – длина оставшегося куска файла (без учета этих трёх байт).

Как вычислить эту длину? Становимся на последний байт файла – допустим, это адрес 05ECH. Поскольку адресация идет с нуля,
то всего в файле 05EDH байт. Вычитаем три (первых) – получаем 05EAH. Это число и ставим во второй и третий байты заголовка
(естественно, младший байт идет первым – EA 05).

Далее – cохраняем, запаковываем Dialog Stream на место, закрываем файл (DocFileBrowser открывает файлы монопольно, 1С
одновременно с ним тот же файл открыть не сможет).

Теперь открываем отчет в 1С, и наслаждаемся произведённым эффектом.

Напоследок хочу предупредить – редактирование свойств «пропатченной» кнопки в конфигураторе приводит к потере
установленного хоткея, это вполне закономерно и ничего тут не поделать. Будьте внимательны.

К сему описанию прилагается демонстрационный пример с тремя хоткеями – Ctrl+D, Alt+D и просто D. При чем все они (D в том
числе) действуют даже тогда, когда фокус находится в поле ввода.

Самое последнее: при вызове хоткея активный элемент не теряет фокуса!
-----------------------------

ЗЫ: Если не ошибаюсь был скрипт под опенконф, который умел это делать быстро....
8 kir-g
 
29.01.07
15:03
(7)Спасибо
9 Ёпрст2
 
29.01.07
15:06
Для Опенькофа, простейший скрипт:

Sub AddHotkey()  
   Set doc = Windows.ActiveWnd.Document.Page(0)
   DlgText = doc.Stream  

    doc.Stream = Replace(DlgText, "{""""7"""",""""112""""}", "{""""0"""",""""45""""}")
End sub
//заменяет Shift+F1 на кнопки на Ins, вместо Ins (скан код 45) можно подставить что угодно ...
Примеры кнопок: http://slil.ru/23836898
10 Ёпрст2
 
29.01.07
15:06
11 kir-g
 
29.01.07
15:16
(10)Тоже спасибо
12 GrayT
 
29.01.07
15:17
+11
13 Student1983
 
30.01.07
09:27
А что такое Formex?
14 mergan
 
30.01.07
09:29
аха теперь откройте обработку... ченить сделайте и за сэйвите
15 Груздь
 
30.01.07
09:32
FormEx непредсказуемо глючит при работе с клавиатурой ...
16 mergan
 
30.01.07
09:33
а кто-то говорил, что это безглючная компонента
17 Guk
 
30.01.07
09:34
(16) Такие вообще бывают?...
18 mergan
 
30.01.07
09:35
(17)если верить некоторым то да
19 Груздь
 
30.01.07
09:37
(16) Это альфовские популизаторы ...
20 mergan
 
30.01.07
09:38
странно, но ладно
21 Ёпрст2
 
30.01.07
11:40
(14) И чего будет? ...
22 mergan
 
30.01.07
11:41
(21)ну как минимум опять скрип запускать
23 Ёпрст2
 
30.01.07
12:25
(22) Не верю ... :)
Всё работает  и сбоев замечено не было никогда.
24 mergan
 
30.01.07
12:33
(23)я уже деталей не помню... столкнулся когда делали вирусяку в 1С... тобишь прятали код от просмотра...
25 Ёпрст2
 
30.01.07
12:39
(24) Всё может быть ..ни разу не сталкивался ...
ЗЫ: Вон, и фичу про журнал доков продают ... как по инсёрту вводить документы только тех видов, которые сам установил.
26 mergan
 
30.01.07
12:41
(25)ВК?
27 Ёпрст2
 
30.01.07
12:42
(26) Не .. на основе вот этого сделана ..
http://www.sinor.ru/~my1c/knowhow/fijd.html
28 mergan
 
30.01.07
12:45
(27)тобишь, что-то в мд засовывают?
29 GrayT
 
30.01.07
12:50
(28)Это, имхо, немного о другом. Но и в МД засовывают и нормально говорят живет при обновлении
30 Ёпрст2
 
30.01.07
12:51
(28) Не .. просто встретилась обработка , закрытая КЗК - настраиваемый ввод документов по Инсёрту в общем журнале  - типа тыркаешь на Ins - появляется не стандартное окошко выбора видов доков, а своя обработка, где сам настраиваешь виды документов, сортировку и т.д..
Ны дык, сделана она на основе (27): делаем служебный документ, в ПриОткрытии
вызов этой обработки + СтатусВозврата(0).
31 mergan
 
30.01.07
12:53
(29,30)а как бы на сие чудо глянуть?
32 GrayT
 
30.01.07
12:56
(31)Парень ты умный, думаю ссылки хватит :)
http://www.1cpp.ru/wiki/?wakka=CConfigContIDToTextModule&v=b3j
33 Vippi
 
30.01.07
13:00
(15) Это зависит от рук того, кто на клавиши жмет :)
34 mergan
 
30.01.07
13:02
(32)фэнкс... на досуге покурим травку
35 GrayT
 
30.01.07
13:03
(34)Аккуратней - забористая сволочь, уже несколько ночей кумарю :(
36 mergan
 
30.01.07
13:05
(35)ну я на выходных дома... тут один фих толком не подумаешь... постоянно... принеси/подай
37 GrayT
 
30.01.07
13:06
(36)Ни че... притрется со временем :)
38 Ёпрст2
 
30.01.07
13:07
(31) http://www.sinor.ru/~filez/saleidea.htm
ого, оказывается, это сам mszsuz продает, а я и не знал, так скачал где то ..
39 mergan
 
30.01.07
13:08
(37)у меня зависимость плохая... видать в детсве кормили чем-то не таким... хотя от папирос до сих пор отвязаться не могу
40 mergan
 
30.01.07
13:11
(38)а отправляет на проклаб... наверное качнуть просто не дадут ((((
41 Ёпрст2
 
30.01.07
13:18
(40) Лови http://slil.ru/23842710
42 mergan
 
30.01.07
14:15
(41)фэнкс... правда с проклаба скачалось все... и как говорил товарищ... во истину все гениальное просто ))))
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс