Difference between revisions of "Студия/OnKeyPress"
m (1 revision imported) |
m (1 revision imported) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
{{infobox function | {{infobox function | ||
|name=OnKeyPress | |name=OnKeyPress | ||
− | |element=Список значений, Таблица значений, Дерево значений | + | |element=Форма, Список значений, Таблица значений, Дерево значений |
|caption=Визуальные события | |caption=Визуальные события | ||
|eventtype=Прерывающее | |eventtype=Прерывающее | ||
Line 9: | Line 9: | ||
* [[Студия/Редактор форм|Редактор форм]] | * [[Студия/Редактор форм|Редактор форм]] | ||
* [[Студия/Визуальные события|Визуальные события]]}} | * [[Студия/Визуальные события|Визуальные события]]}} | ||
− | Событие, возникающее при нажатии на клавишу клавиатуры, когда текущий элемент | + | Событие, возникающее при нажатии на клавишу клавиатуры, когда текущий элемент или форма активны. Не все комбинации могут быть пойманы в этом событии. Это событие используется для табличных элементов, для полей используется событие [[Студия/OnBeforeChange|OnBeforeChange]]. '''Важно''': для формы используется более сложный механизм отлова нажатия, под Windows это приводит к тому, что во время исполнения события строго не рекомендуется изменение графических свойств формы. Система пытается обойти это ограничение, однако, без реальной необходимости обработчик должен совершить невизуальные действия и вернуть управление. |
==== Аргументы ==== | ==== Аргументы ==== | ||
− | * <code>''<Key (INT)>''</code> - Виртуальный код нажатой клавиши (см. документацию Windows, используются коды клавиш, типа <code>VK_BACK</code> и т.п.). Большинство цифровых или литерных клавиш | + | * <code>''<Key (INT)>''</code> - Виртуальный код нажатой клавиши (см. документацию Windows, используются коды клавиш, типа <code>VK_BACK</code> и т.п.). Большинство цифровых или литерных клавиш имеют коды, совпадающие с кодами ASCII. |
* <code>''<KeyCombo (STRING)>''</code> - Визуальное представление нажатой клавиши совместно с клавишами модификаторами. К примеру, <code>"Ctrl+A"</code>. Для проверки активности клавиш-модификаторов можно также использовать функцию [[IsKeyComboActive]]. | * <code>''<KeyCombo (STRING)>''</code> - Визуальное представление нажатой клавиши совместно с клавишами модификаторами. К примеру, <code>"Ctrl+A"</code>. Для проверки активности клавиш-модификаторов можно также использовать функцию [[IsKeyComboActive]]. | ||
+ | * <code>''<Char (STRING)>''</code> - Результат преобразования виртуального кода в введенный символ с учетом текущего языка и модификаторов клавиатуры. Если использовалась несимвольная клавиша, данный параметр будет пустой строкой. | ||
* <code>''<Result (INT)>''</code> - {{ByRef}} Переменная результата может принимать значения: | * <code>''<Result (INT)>''</code> - {{ByRef}} Переменная результата может принимать значения: | ||
** '''0''' (по умолчанию) -- Принять нажатие (разрешить передачу этого нажатия клавиши активному элементу формы). | ** '''0''' (по умолчанию) -- Принять нажатие (разрешить передачу этого нажатия клавиши активному элементу формы). |
Latest revision as of 19:10, 20 November 2021
OnKeyPress (Визуальные события) | |||||||
---|---|---|---|---|---|---|---|
|
Событие, возникающее при нажатии на клавишу клавиатуры, когда текущий элемент или форма активны. Не все комбинации могут быть пойманы в этом событии. Это событие используется для табличных элементов, для полей используется событие OnBeforeChange. Важно: для формы используется более сложный механизм отлова нажатия, под Windows это приводит к тому, что во время исполнения события строго не рекомендуется изменение графических свойств формы. Система пытается обойти это ограничение, однако, без реальной необходимости обработчик должен совершить невизуальные действия и вернуть управление.
Аргументы
<Key (INT)>
- Виртуальный код нажатой клавиши (см. документацию Windows, используются коды клавиш, типаVK_BACK
и т.п.). Большинство цифровых или литерных клавиш имеют коды, совпадающие с кодами ASCII.<KeyCombo (STRING)>
- Визуальное представление нажатой клавиши совместно с клавишами модификаторами. К примеру,"Ctrl+A"
. Для проверки активности клавиш-модификаторов можно также использовать функцию IsKeyComboActive.<Char (STRING)>
- Результат преобразования виртуального кода в введенный символ с учетом текущего языка и модификаторов клавиатуры. Если использовалась несимвольная клавиша, данный параметр будет пустой строкой.<Result (INT)>
- (возможен аргумент-переменная (ByRef)) Переменная результата может принимать значения:- 0 (по умолчанию) -- Принять нажатие (разрешить передачу этого нажатия клавиши активному элементу формы).
- 1 -- Отвергнуть нажатие (нажатие клавиши будет проигнорировано).
Примеры
//Эмуляция поведения при нажатии Ctrl+Up, Ctrl+Down в таблице, где работа с папками задается программно (к примеру, отображается файловая система). //Ctrl+Up MainTab:=Form.MainTab.Value; If (Key=38)And(IsKeyComboActive("Ctrl")) Then Result:=1; //Выйти из текущего уровня, если он не верхний If спУровень.Size()>0 Then iNum:=спУровень.Size(); ТекЭлемент:=спУровень.Get(iNum); //Создать отображение всего пути ТекПапка:=""; For i:=1 To iNum-1 Do ТекПапка:=ТекПапка+спУровень.Get(i)+"\"; EndDo; ОбновитьТаблицу(); EndIf; //Ctrl+Down ElseIf (Key=40)And(IsKeyComboActive("Ctrl")) Then //Тоже самое, что Enter, если курсор находится на папке Result:=1; If MainTab.SelectedLine=0 Then Exit; EndIf; MainTab.CurLine:=MainTab.SelectedLine; //Проверим, находимся ли мы на папке (с помощью номера иконки, к примеру) If MainTab.Icon(MainTab.CurLine,"Иконка")=98 Then ТекЭлемент:=MainTab.Наименование; ТекПапка:=ТекПапка+MainTab.Наименование+"\"; ОбновитьТаблицу(); EndIf; EndIf;