Опрос клавиши в регистре Ctrl мало чем отличается от обычного опроса. Правда, при нажатой клавише Ctrl эффект от нажатия алфавитной клавиши определяется ее латинским названием, даже если включен регистр кириллицы. Вопрос же в том, что вернет функция ReadKey в этом случае. Профессионалы могут получить ответ на этот вопрос из табл. 21.1 и не читать этот раздел. Нажатие в регистре Ctrl клавиши на алфавитной клавиатуре выдает в ReadKey ASCII-код в диапазоне 1..26. Значение этого кода равно порядковому номеру буквы в английском алфавите (Ctrl+A даст 1, а Ctrl+Z — 26). Поэтому, получив после выполнения строки
C := ReadKey
в переменную C управляющий символ, ее надо сравнивать уже не с алфавитом, а с самими управляющими символами. Пусть, например, надо опросить только комбинации Ctrl+F, Ctrl+P и Ctrl+S. Это можно сделать двумя способами:
1) repeat 2) repeat
c:= ReadKe c := ReadKey
until(c in [#6, #16, #19]); until(c in [^F, ^P, ^S]);
case c of (Ctrl+F, P и $) case c of (Ctrl+F, P и S)
... ...
end; {case} end; {case}
Первый способ использует специальный синтаксис Турбо Паскаля.
Второй способ основан на том, что можно коды, связанные с алфавитом, изображать как “K, где” — знак «стрелка вверх, а К — клавиша с соответствующим порядковым номером символа.
Таблица 21.1
Клавиша
Нормальное нажатие
+SHIFT
+CTRL
+ALT
A
0 30
B
0 48
C
0 46
D
0 32
E
0 18 {496}
F
0 33
G
0 34
H
0 35
I
0 23
J
0 36
K
0 37
L
0 38
M
0 50
N
0 49
O
0 24
P
0 25
Q
0 16
R
0 19
S
0 31
T
0 20
U
0 22
V
0 47
W
0 17
X
0 45
Y
0 21
Z
0 44
[{
\|
]}
῾~
1!
0 120
2@
0 3
0 121
3#
0 122
4$
0 123
5%
0 124
6^
0 125
7&
0 126
8*
0 127
9(
0 128
0)
0 129
-_
0 130
=+
0 131
,<
.>
/?
;:
‘”
Влево
0 75
0 115
Вправо
0 77
0 116
6 {497}
Вверх
0 72
Вниз
0 80
Home
0 71
0 119
End
0 79
0 117
PgUp
0 73
0 132
PgDn
0 81
0 118
Ins
0 82
Del
0 83
Esc
BackSpace
Tab
0 15
Серая /
Серая *
Серая -
Серая +
Enter ¿
Пробел
F1
0 59
0 84
0 94
0 104
F2
0 60
0 85
0 95
0 105
F3
0 61
0 86
0 96
0 106
F4
0 62
0 87
0 97
0 107
F5
0 63
0 88
0 98
0 108
F6
0 64
0 89
0 99
0 109
F7
0 65
0 90
0 100
0 110
F8
0 66
0 91
0 101
0 111
F9
0 67
0 92
0 102
0 112
F10
0 68
0 93
0 103
0 113
F11
0 133
0 135
0 137
0 139
F12
0 134
0 136
0 138
0 140
Некоторые служебные и цифровые клавиши могут иметь иные коды на разных ПЭВМ.
Есть еще один способ — перечислить в множестве конструкции Chr( 6), Chr( 16 ), Chr( 19) и т.п., но это будет слишком громоздко (хотя только через функцию Chr можно реализовать переменные значения символов в множествах).
Полный набор управляющих символов состоит из 32 наименований с кодами от 0 до 31 включительно. Не попавшие в диапазон 1..26 коды, однако, тоже могут быть получены аналогичным образом. Некоторые из цифровых клавиш, расположенных сразу над алфавитными, и знаков пунктуации в сочетании с регистром Ctrl дают недостающие коды (см. табл. 21.1). Хотя, признаться, авторы плохо представляют себе, где и как можно использовать такие «неуклюжие» {498} запросы, как Ctrl и клавиша «-» (код 31) или Ctrl+6 (код 30). Исключение составляет код 0. Он является чисто внутренним, и никакой комбинацией клавиш нельзя получить его в чистом виде.
Тот, кто просмотрит весь столбец «Ctrl» табл. 21.1, возможно, согласится с расстановкой кодов после буквы «Z» по принципу «максимального беспорядка». И, вероятно, понятное недоумение вызовут коды из двух цифр. Они описаны в следующем разделе.