Студия/OnKeyPress
| OnKeyPress (Визуальные события) | |||||||
|---|---|---|---|---|---|---|---|
| |||||||
Событие, возникающее при нажатии на клавишу клавиатуры, когда текущий элемент активен. Не все комбинации могут быть пойманы в этом событии. Это событие используется для табличных элементов, для полей используется событие OnBeforeChange.
Аргументы
<Key (INT)>- Виртуальный код нажатой клавиши (см. документацию Windows, используются коды клавиш, типаVK_BACKи т.п.). Большинство цифровых или литерных клавиш имеет коды, совпадающие с кодами ASCII.<KeyCombo (STRING)>- Визуальное представление нажатой клавиши совместно с клавишами модификаторами. К примеру,"Ctrl+A". Для проверки активности клавиш-модификаторов можно также использовать функцию IsKeyComboActive.<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;