Большинство клавиш клавиатуры имеют постоянное значение, когда они объединяются в нажатии
с различными клавишами модификаторов (SHIFT, CTRL и ALT). Все обычные клавиши клавиатуры (символьные и специальных символов)
имеют код клавиши соответствующий значению ASCII.
Значения кода клавишы и клавиши модификаторв возвращаются в структуре EventRec.
Код клавиши может быть найден в EventRec.message, а код клавиши модификатора может быть найден в EventRec.modifiers.
Visual FoxPro интерпретирует нажатия некоторых клавиш в зависимости от используемой клавиши модификатора
в виде различных значений, когда объединяются нажатия клавиш. Например, если нажаты SHIFT+F10,
то соответствующие поля в структуре EventRec должны имет значения:
Аналогично, если нажаты CTRL+F10, то значениями в структуре EventRec будут:
Когда с нажатием клавиши используется нажатие более одного модификатора,
то значения кодов складываются. Например, если вы нажмете CTRL+SHIFT+F10, то будут возвращены
следующие значения:
Значение EventRec.modifiers в предшествующем примере равно 0x3000, так как
оба модификатора - и CTRL, и SHIFT - были включены в нажатие клавиши.
Поэтому значение клавиши модификатора SHIFT (0x1000) было добавлено к значению клавищи модификатора CTRL (0x2000),
в результате чего мы получили значение 0x3000.
Замечание |
---|
Метод интерпретации клавиш в Visual FoxPro (особенно в случае использования совместного использования клавиш с модификаторами)
присущ Visual FoxPro. Другие программы могут интерпретировать нажатия клавиш по разному.
Если клавина нажата в комбинации с одним или множеством клавиш модификаторов (SHIFT, CTRL и ALT),
то высший полубайт будет представлять используемые модификаторы.
|
В приведенной ниже таблице показывается, что клавиша F8 имеет разные коды в зависимости от используемого
модификатора.
Нажатые клавиши
|
Модификаторы
|
Значение кода клавиши F8
|
F8
|
Нет
|
\x142
|
SHIFT+F8
|
SHIFT
|
\x15B
|
CTRL+F8
|
CTRL
|
\x165
|
ALT+F8
|
ALT
|
\x16F
|
Каждая специальная клавиша, которая может быть объединена с модификаторами, в случае объединения
будет иметь уникальное значение своего кода. Если специальная клавиша объединяется с множеством
модификаторов, то уникальное значение, присваиваемое клавише представляет собой
значение в соответствии с приведенными ниже правилами:
-
Сначала проверяется - была ли нажата комбинация клавиш, включая ALT,
так как основной клавише будет присвоено ее значение сложенное со значением кода клавиши ALT.
-
Если комбинация клавиш не включает в себя клавишу ALT, то проверяется - была ли нажата клавиша CTRL,
так как основной клавише будет присвоено ее значение сложенное со значением кода клавиши
CTRL.
-
Если не были нажаты ни ALT, ни CTRL, то смотрим - была ли нажата клавиша SHIFT.
-
И наконец, в случае, если модификаторы вообще не использовались,
то присваивается значение основной клавиши без добавления значений кода модификаторов.
Коды специальных клавиш
В приведенной ниже таблице перечислены значения клавиш, присваемые Visual FoxPro специальным клавишам клавиатуры.
Клавиша
|
Код клавиши (Hex)
|
Клавиша модификатор
|
LEFTMOUSE
|
100
|
Нет
|
F1
|
13B
|
Нет
|
F2
|
13C
|
Нет
|
F3
|
13D
|
Нет
|
F4
|
13E
|
None
|
F5
|
13F
|
Нет
|
F6
|
140
|
Нет
|
F7
|
141
|
Нет
|
F8
|
142
|
Нет
|
F9
|
143
|
Нет
|
F10
|
144
|
Нет
|
HOME
|
147
|
Нет
|
UPARROW
|
148
|
Нет
|
PGUP
|
149
|
Нет
|
LEFTARROW
|
14B
|
None
|
RIGHTARROW
|
14D
|
Нет
|
END
|
14F
|
Нет
|
DNARROW
|
150
|
None
|
PGDN
|
151
|
Нет
|
INS
|
152
|
Нет
|
DEL
|
153
|
Нет
|
F11
|
185
|
Нет
|
F12
|
186
|
Нет
|
BACKTAB
|
10F
|
shiftKey
|
SHIFT+F1
|
154
|
shiftKey
|
SHIFT+F2
|
155
|
shiftKey
|
SHIFT+F3
|
156
|
shiftKey
|
SHIFT+F4
|
157
|
shiftKey
|
SHIFT+F5
|
158
|
shiftKey
|
SHIFT+F6
|
159
|
shiftKey
|
SHIFT+F7
|
15A
|
shiftKey
|
SHIFT+F8
|
15B
|
shiftKey
|
SHIFT+F9
|
15C
|
shiftKey
|
SHIFT+F10
|
15D
|
shiftKey
|
SHIFT+F11
|
187
|
shiftKey
|
SHIFT+F12
|
188
|
shiftKey
|
CTRL+A
|
001
|
ctrlKey
|
CTRL+B
|
002
|
ctrlKey
|
CTRL+C
|
003
|
ctrlKey
|
CTRL+D
|
004
|
ctrlKey
|
CTRL+E
|
005
|
ctrlKey
|
CTRL+F
|
006
|
ctrlKey
|
CTRL+G
|
007
|
ctrlKey
|
CTRL+H
|
008
|
ctrlKey
|
CTRL+I
|
009
|
ctrlKey
|
CTRL+ENTER
|
00A
|
ctrlKey
|
CTRL+J
|
00A
|
ctrlKey
|
CTRL+K
|
00B
|
ctrlKey
|
CTRL+L
|
00C
|
ctrlKey
|
CTRL+M
|
00D
|
ctrlKey
|
CTRL+N
|
00E
|
ctrlKey
|
CTRL+O
|
00F
|
ctrlKey
|
CTRL+P
|
010
|
ctrlKey
|
CTRL+Q
|
011
|
ctrlKey
|
CTRL+R
|
012
|
ctrlKey
|
CTRL+S
|
013
|
ctrlKey
|
CTRL+T
|
014
|
ctrlKey
|
CTRL+U
|
015
|
ctrlKey
|
CTRL+V
|
016
|
ctrlKey
|
CTRL+W
|
017
|
ctrlKey
|
CTRL+X
|
018
|
ctrlKey
|
CTRL+Y
|
019
|
ctrlKey
|
CTRL+Z
|
01A
|
ctrlKey
|
CTRL+LBRACKET
|
01B
|
ctrlKey
|
CTRL+BACKSLASH
|
01C
|
ctrlKey
|
CTRL+RBRACKET
|
01D
|
ctrlKey
|
CTRL+CARET
|
01E
|
ctrlKey+shiftKey
|
CTRL+HYPHEN
|
01F
|
ctrlKey
|
CTRL+SPACEBAR
|
020
|
ctrlKey
|
CTRL+F1
|
15E
|
ctrlKey
|
CTRL+F2
|
15F
|
ctrlKey
|
CTRL+F3
|
160
|
ctrlKey
|
CTRL+F4
|
161
|
ctrlKey
|
CTRL+F5
|
162
|
ctrlKey
|
CTRL+F6
|
163
|
ctrlKey
|
CTRL+F7
|
164
|
ctrlKey
|
CTRL+F8
|
165
|
ctrlKey
|
CTRL+F9
|
166
|
ctrlKey
|
CTRL+F10
|
167
|
ctrlKey
|
CTRL+LEFTARROW
|
173
|
ctrlKey
|
CTRL+RIGHTARROW
|
174
|
ctrlKey
|
CTRL+END
|
175
|
ctrlKey
|
CTRL+PGDN
|
176
|
ctrlKey
|
CTRL+HOME
|
177
|
ctrlKey
|
CTRL+PGUP
|
184
|
ctrlKey
|
CTRL+F11
|
189
|
ctrlKey
|
CTRL+F12
|
18A
|
ctrlKey
|
CTRL+UPARROW
|
18D
|
ctrlKey
|
CTRL+DNARROW
|
191
|
ctrlKey
|
CTRL+INS
|
192
|
ctrlKey
|
CTRL+DEL
|
193
|
ctrlKey
|
CTRL+TAB
|
194
|
ctrlKey
|
ALT+Q
|
110
|
altKey
|
ALT+W
|
111
|
altKey
|
ALT+E
|
112
|
altKey
|
ALT+R
|
113
|
altKey
|
ALT+T
|
114
|
altKey
|
ALT+Y
|
115
|
altKey
|
ALT+U
|
116
|
altKey
|
ALT+I
|
117
|
altKey
|
ALT+O
|
118
|
altKey
|
ALT+P
|
119
|
altKey
|
ALT+A
|
11E
|
altKey
|
ALT+S
|
11F
|
altKey
|
ALT+D
|
120
|
altKey
|
ALT+F
|
121
|
altKey
|
ALT+G
|
122
|
altKey
|
ALT+H
|
123
|
altKey
|
ALT+J
|
124
|
altKey
|
ALT+K
|
125
|
altKey
|
ALT+L
|
126
|
altKey
|
ALT+Z
|
12C
|
altKey
|
ALT+X
|
12D
|
altKey
|
ALT+C
|
12E
|
altKey
|
ALT+V
|
12F
|
altKey
|
ALT+B
|
130
|
altKey
|
ALT+N
|
131
|
altKey
|
ALT+M
|
132
|
altKey
|
ALT+F1
|
168
|
altKey
|
ALT+F2
|
169
|
altKey
|
ALT+F3
|
16A
|
altKey
|
ALT+F4
|
16B
|
altKey
|
ALT+F5
|
16C
|
altKey
|
ALT+F6
|
16D
|
altKey
|
ALT+F7
|
16E
|
altKey
|
ALT+F8
|
16F
|
altKey
|
ALT+F9
|
170
|
altKey
|
ALT+F10
|
171
|
altKey
|
ALT+1
|
178
|
altKey
|
ALT+2
|
179
|
altKey
|
ALT+3
|
17A
|
altKey
|
ALT+4
|
17B
|
altKey
|
ALT+5
|
17C
|
altKey
|
ALT+6
|
17D
|
altKey
|
ALT+7
|
17E
|
altKey
|
ALT+8
|
17F
|
altKey
|
ALT+9
|
180
|
altKey
|
ALT+0
|
181
|
altKey
|
ALT+F11
|
18B
|
altKey
|
ALT+F12
|
18C
|
altKey
|
ALT+HOME
|
197
|
altKey
|
ALT+UPARROW
|
198
|
altKey
|
ALT+PGUP
|
199
|
altKey
|
ALT+LEFTARROW
|
19B
|
altKey
|
ALT+RIGHTARROW
|
19D
|
altKey
|
ALT+END
|
19F
|
altKey
|
ALT+DNARROW
|
1A0
|
altKey
|
ALT+PGDN
|
1A1
|
altKey
|
ALT+INS
|
1A2
|
altKey
|
ALT+DEL
|
1A3
|
altKey
|
Пример
|
Скопировать код |
---|
FAR EventHandler(WHandle theWindow, EventRec FAR *ev)
{
switch(ev->what)
{
case keyDownEvent: /* Проверка keyDownEvent */
if (ev->modifiers & shiftCodeMask) /* Был нажат модификатор. */
{
if (ev->modifiers & altKey) /* Проверка для клавиши ALT */
_PutStr("ALT Key Code should be used.\n");
else
if (ev->modifiers & ctrlKey) /* Проверка для клавиши CTRL */
_PutStr("CTRL Key Code should be used.\n");
else
if (ev->modifiers & shiftKey) /* Проверка для клавиши SHIFT */
_PutStr("SHIFT Key Code should be used.\n");
}
else
_PutStr("Regular Key Code should be used.\n");
return NO; /* Пусть Visual FoxPro имеет и клавишу */
break;
default:
return NO;
}
} |
Замечание |
---|
shiftCodeMask, altKey, ctrlKey и shiftKey определены в PRO_EXT.H и PRO_EXT.INC так как показано ниже:
|
Смотрите
также