- •Строки
- •События, связанные с клавиатурой
- •Списки
- •Управляющий элемент ListBox
- •List
- •Внешний вид: стандартный или с флажком
- •Содержит количество строк в списке
- •Описание
- •Управляющий элемент ComboBox
- •Изменение характеристик шрифта
- •Количество экранных и принтерных шрифтов
- •Файлы
- •Режимы доступа к файлам
- •Текстовые файлы
- •Управляющие элементы для работы с файлами
- •Открыть диалог установка параметров принтера
Вы без особого труда сможете получить таблицу символов в кодировке Win-1251. Обращаю Ваше внимание только на то, что буквы «ю» и «я» имеют шестнадцатеричные коды FE и FF – эта информация пригодится нам при изучении примера на запись строки в стандарте Unicode.
События, связанные с клавиатурой
В разделе «Массивы объектов» Вы познакомились с событиями Change и Validate для текстовых полей. Однако для полей существуют еще и события, связанные с клавиатурой, – это KeyPress, KeyDown и KeyUp. Последние два события выполняются после нажатия или отпускания комбинаций символьных и спецклавиш, а событие KeyPress выполняется в момент нажатия на символьную клавишу. Эти события имеют следующие аргументы:
•KeyCode, KeyAscii – содержат код символьной клавиши;
•Shift – содержит код спецклавиш от 0 до 7. Если Shift=1, то была нажата клавиша Shift, Shift=2 – была нажата клавиша CTRL; Shift=4 – была нажата клавиша ALT. Промежуточные значения
соответствуют комбинациям клавиш.
Пример 26. Дана строка кириллицы. Заменить в строке все пары символов «: » на «- ». Программу защитить паролем, а также защитить от возможности ввода латинских букв.
Private Sub Form_Load()
'Для всех объектов на форме в режиме конструирования определить
'свойства Font=MS Sans Serif, 8, жирный
Caption = "События, связанные с клавиатурой" Label1.FontBold = True
Label1 = "Введите пароль и нажмите CTRL+Enter"
Command1.Visible = False |
|
|
'Кнопка не видна |
|
Text1 = "" : |
Text2 = "" |
: |
Text3 = "" : |
Text1.TabIndex = 0 |
Text2.Visible = False |
: |
Text3.Visible = False |
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 And Shift = 2 Then |
'Продолжение по CTRL+Enter |
|
If Text1 = "Qween" Then |
|
'Проверка пароля в Text1 |
Caption = "Пароль верен" |
|
|
Label1 = "Ввести строку и заменить в ней ': ' на '- '" |
||
Command1.Visible = True |
|
'Кнопка видима, |
Command1.Enabled = False |
|
'но не активна |
Text1.Visible = False |
|
'Text1 невидимо |
Text2.Visible = True |
|
'Text2 видимо |
Text2.SetFocus |
|
'Фокус на Text2 |
Text3.Visible = True |
'Text3 видимо, но недоступно для ввода |
|
Text3.Locked = True |
|
|
st = "И сказал Сидящий на престоле: се, творю все новое." & vbCrLf Text2 = st & "И говорит мне: напиши; ибо слова сии истинны и верны." Else
Label1 = "Пароль не верен" Text1 = ""
End If
End If
End Sub
Private Sub Text2_Change()
Command1.Enabled = True
Command1.Caption = "Замена" Рис.33. Диалог ввода пароля
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
Dim Range As Boolean
' Защищаем поле от ввода прописных и строчных латинских букв
Range = (KeyAscii >= 65 And KeyAscii <= 90) Or _ (KeyAscii >= 97 And KeyAscii <= 122)
If Range Then Text2 = ""
End Sub
Private Sub Замена_Click() s$ = Text2
For i% = 1 To Len(s)
If Mid(s, i, 2) = ": " Then Mid(s, i, 2) = "- "
End If
Next Text3 = s
End Sub
Рис.34
В процедуре обработки события KeyDown анализируется значение введенного пароля. Эта процедура запустится только тогда, когда пользователь нажмет комбинацию клавиш CTRL+Enter. Если пароль неверен, то курсор останется в том же поле. Если пароль верен, то появятся новые поля и кнопка для замены символов. Блокировка ввода латинских букв осуществляется в процедуре обработки события KeyPress с помощью логической переменной Range.
Обратите внимание на строку Mid(s, i, 2)="- " . Здесь функция Mid используется не в выражении справа, где ей следовало быть, а слева, в качестве переменной результата присваивания выражения. Это одно из отступлений от классического правила программирования, согласно которому результат выражения может присваиваться только простой переменной, а не функции. На языке Pascal подобная конструкция привела бы к ошибке Invalid variable referense.
Если возникает необходимость принудительной передачи фокуса на какой-либо объект в режиме выполнения, то следует использовать метод
SetFocus.