gifts2017

Полноценные шорткаты

Опубликовал Павел Егоров (SatanClaws) в раздел Программирование - Теория программирования

Никогда не возникало желания в 1С8 повесить какое-либо действие на шорткат Shift+Enter, или Ctrl+PgDn?

А так же еще немного из личного опыта с осьмеркой...

1. Итак, шорткаты.

В общем-то, ничего сложного там нет - ЗначениеВСтрокуВнутр() и вдумчивое покурить результат минут 10.

Лучше я сразу напишу, как его создать - произвольный шорткат

Модификатор = 0;
Если Альт Тогда Модификатор = Модификатор + 16; КонецЕсли;
Если Ктрл Тогда Модификатор = Модификатор + 8; КонецЕсли;
Если Шифт Тогда Модификатор = Модификатор + 4; КонецЕсли;

стрВнутр = "{""#"",69cf4251-8759-11d5-bf7e-0050bae2bc79,1," + Символы.ПС + "{0," + КодКлавиши + "," + Модификатор + "}" + Символы.ПС + "}";

//Символы.ПС, кстати говоря, кажется и не нужны даже - вроде и без них должно работать.


Шорткат = ЗначениеИзСтрокиВнутр(стрВнутр);


Дальше остается только пояснить про КодыКлавиш - и полученный результат можно скармливать Кнопка.СочетаниеКлавиш

Но там тоже ничего сложного - Enter=13,  Esc=27 и так далее.

Кстати, можно повесит шорткат даже, например, на Alt+Shift - только нужно и в модификаторы прописать 20 и в КодКлавиши прописать, 18(это Alt) или 16(это Shift).

Единственное - стоит помнить, что сначала шорткаты перехватывает Винда. Так что на Альт-Ф4 ничего повесить не получится.

 

2. Если у вас есть форма, размер которой рассчитывается каждый раз после ее открытия, то наверняка замечали, что 1Ска запоминает размер формы от прошлого открытия и в качестве базового берет именно его. Что просто жутко мешается.

Первое, что приходит в голову - в ПередОткрытием() написать что-то вроде ЭтаФорма.ИмяСохраняемогоОкна = Новый УникальныйИдентификатор;

Однако, есть способ проще - достаточно до показа формы обратиться на запись к ее реквизиту Высота или Ширина.

Т.е. пишем в ПередОткрытием()/ПриОткрытии() Форма.Высота = Форма.Высота - и все работает как надо.

PS но отсутствие штатного события ПослеОткрытия() несколько... удручает :-/

 

Upd по пункту 1:

BackSpase 8
Tab 9
Enter 13
Shift 16
Ctrl 17
Alt 18
CapsLock 20
Esc 27
Space 32
PgUp 33
PgDn 34
End 35
Home 36
Left 37
Up 38
Right 39
Down 40
Ins 45
Del 46
LWinKey 91
RWinKey 92
AppKey 93
Num0 96
Num1 97
Num2 98
Num3 99
Num4 100
Num5 101
Num6 102
Num7 103
Num8 104
Num9 105
NumMultiply 106
NumAdd 107
NumSubtract 109
NumDecimal 110
NumDivide 111
F1 112
F2 113
F3 114
F4 115
F5 116
F6 117
F7 118
F8 119
F9 120
F10 121
F11 122
F12 123
ScrlLock 145
NumLock 144
Semi 186
Add 187
Comma 188
Minus 189
Dot 190
Slash 191
Tilde 192
LSqrBrckt 219
Backslash 220
RSqrBrckt 221
Apostrophe 222

См. также

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

Комментарии

1. Сергей Троицкий (tsd) 08.09.09 18:04
А зачем оно, штатное событий ПослеОткрытия()? чего хорошего может дать?
2. Павел Егоров (SatanClaws) 08.09.09 19:13
(1) Например, создание элементов формы до ее открытия ведет себя достаточно глючно в случаях, когда необходимо исходную форму увеличить по высоте/ширине.

Конечно, как вариант: сделать исходную форму максимальных размеров и потом только уменьшать ее - но это не выход, на мой взгляд.
3. Serj (Serj1C) 09.09.09 06:51
4. Артур Аюханов (artbear) 09.09.09 08:27
(0) В описании/названии отдельно выдели, что для 8 или 8.1
Сразу и не поймешь, для какой платформы
5. Евгений Люлюк (Evg-Lylyk) 09.09.09 12:37
А где коды посмотреть для стрелок (left, right и т.д.) например?
6. Альтаир (Altair777) 09.09.09 12:57
(5) В Гугле :-) Строка поиска
коды клавиш клавиатуры

Первая ссылка
7. Павел Егоров (SatanClaws) 09.09.09 13:42
8. Олег Молочников (milkers) 10.09.09 13:45
Каким образом ты фиксируешь нажатие ALT? Привел бы ты кусочек кода.
9. Павел Егоров (SatanClaws) 10.09.09 18:15
(8) "Кстати, можно повесит шорткат даже, например, на Alt+Shift - только нужно и в модификаторы прописать 20 и в КодКлавиши прописать, 18(это Alt) или 16(это Shift)."

на пальцах - Альт должен участвовать и как модификатор и как код клавиши.
Причем, в цитируемом примере 2 шортката (по коду клавиши Альта и по коду клавиши Контрола) будут вести себя немного по разному - в одном случае для его срабатывания будет необходимо нажать сначала Альт, затем Ктрл; во втором - в обратной последовательности.
10. Prom_ (PRoman) 13.09.09 14:40
как-то сумбурно. Ничё не понял.
11. Константин (aquakosh) 16.09.09 10:28
> но отсутствие штатного события ПослеОткрытия() несколько... удручает :-/
Уже проходили. См. ОбновлениеОтображения().
12. Павел Егоров (SatanClaws) 16.09.09 11:05
(11) только ОбновлениеОтображения() отрабатывает весьма и весьма часто.
Т.е. делаем флаг "ПервоеОткрытие", который будет изменен при первом обновлении отображения и т.д. - но принципиально метод не лучше, чем
ПодключитьОбработчикОжидания("ПослеОткрытия", 0.1, Истина);
13. Serj (Serj1C) 10.09.11 17:49
хочу добавить:

Функция БыстрыйВызов(Код, Alt=0, Control=0, Shift=0) Экспорт 
   Возврат ЗначениеИзСтрокиВнутр("{""#"",69cf4251-8759-11d5-bf7e-0050bae2bc79,1, 
      |{0,"+ Формат(Код, "ЧН=0; ЧГ=0") +","+ Формат(Alt*16+Control*8+Shift*4, "ЧН=0; ЧГ=0") +"} 
      |}"); 
КонецФункции 
...Показать Скрыть
14. Андрей Акулов (DrAku1a) 24.12.12 02:26
А событие "ПриОткрытии" разве происходет не по факту открытия формы?..
15. Павел Егоров (SatanClaws) 24.12.12 19:27
(14) DrAku1a,
честно, в осьмерке плотно не программировал уже давно - основной код сейчас идет на 7.7++

Но если сравнивать с 7.7, то ПриОткрытии() отрабатывает даже раньше, чем форма физически создается (под нее выделяется место в памяти и на ней создаются контроллы). Собственно, ради чего в FormEx-е есть события ПослеСозданияФормы() и ПослеОткрытия(). Первое отрабатывает, когда в памяти уже существуют все, что нужно; второе - уже после первичной отрисовки формы.

Раз во времена исследования всех этих вещей я решил какую-то проблему - видимо, проблема все-таки имеет место быть.
Скорее всего, в снеговике ПередОткрытием() - аналог ПриОткрытии() из 7.7, а ПриОткрытии() - ПослеСозданияФормы() формекса.
16. Сергей Лесовой (Synoecium) 16.10.14 06:18
Шикарно (имею ввиду возможность назначить любые сочетания клавиш).
17. Андрей Лукин (frkbvfnjh) 24.04.15 16:13
Красавчег, статья зачетная!
18. shard (shard) 30.08.15 18:02
Спасибо тебе, добрый человек!
19. Сергей Шутов (Shootoff) 16.10.15 10:22
В 8.3 комбинация с Enter уже не работает.
Flashill; SamNeSvoy; +2 Ответить 1
20. Кузьмич (Кузьмич) 12.09.16 10:43
(19) Работает.
БыстрыйВызов(13,,1);
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа