21.2. Опрос клавиши в регистре Ctrl
Опрос клавиши в регистре 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
65
97
1
0 30
B
66
98
2
0 48
C
67
99
3
0 46
D
68
100
4
0 32
E
69
101
5
0 18
- 497 -
F
70
102
6
0 33
G
71
103
7
0 34
H
72
104
8
0 35
I
73
105
9
0 23
J
74
106
10
0 36
K
75
107
11
0 37
L
76
108
12
0 38
M
77
109
13
0 50
N
78
110
14
0 49
O
79
111
15
0 24
P
80
112
16
0 25
Q
81
113
17
0 16
R
82
114
18
0 19
S
83
115
19
0 31
T
84
116
20
0 20
U
85
117
21
0 22
V
86
118
22
0 47
W
87
119
23
0 17
X
88
120
24
0 45
Y
89
121
25
0 21
Z
90
122
26
0 44
[{
91
123
27
|
92
124
28
]}
93
125
29
῾~
96
126
1!
49
33
0 120
2@
50
64
0 3
0 121
3#
51
35
0 122
4$
52
36
0 123
5%
53
37
0 124
6^
54
94
30
0 125
7&
55
38
0 126
8*
56
42
0 127
9(
57
40
0 128
0)
48
41
0 129
-_
45
95
31
0 130
=+
61
43
0 131
,<
44
60
.>
46
62
/?
47
63
;:
59
58
'”
39
34
Влево
0 75
52
0 115
4
Вправо
0 77
54
0 116
6
- 498 -
Вверх
0 72
56
8
Вниз
0 80
50
2
Home
0 71
55
0 119
7
End
0 79
49
0 117
1
PgUp
0 73
57
0 132
9
PgDn
0 81
51
0 118
3
Ins
0 82
48
Del
0 83
46
Esc
27
27
27
BackSpace
8
8
127
Tab
9
0 15
Серая /
47
47
Серая *
42
42
Серая -
45
45
Серая +
43
43
Enter
13
13
10
Пробел
32
32
32
32
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). Хотя, признаться, авторы плохо представляют себе, где и как можно использовать такие «неуклюжие»
- 499 -
запросы, как Ctrl и клавиша «-» (код 31) или Ctrl+6 (код 30). Исключение составляет код 0. Он является чисто внутренним, и никакой комбинацией клавиш нельзя получить его в чистом виде.
Тот, кто просмотрит весь столбец «Ctrl» табл. 21.1, возможно, согласится с расстановкой кодов после буквы «Z» по принципу «максимального беспорядка». И, вероятно, понятное недоумение вызовут коды из двух цифр. Они описаны в следующем разделе.