Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
22
Добавлен:
02.05.2014
Размер:
751.22 Кб
Скачать

Вы без особого труда сможете получить таблицу символов в кодировке 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.

Соседние файлы в папке Лекции по информатике [Лебедев]