Практическая
работа №14
Тема:
«Приложения,
обрабатывающие сообщения от драйвера "мыши" и таймера»
Цель
работы: приобретение навыков создания приложений, обрабатывающих клавиатурные
сообщения и сообщения от драйвера "мыши.
Ход работы:
1. Изучить теоретическую
часть
2.
Выполнить задание в соответствии с указаниями
3.
Ответить на контрольные вопросы
4.
Предъявить преподавателю результаты работы: проект и
исходный код
5.
Оформить отчет в соответствии с ходом работы
Теоретическая
часть:
#make_COM#
ORG 100h
.data
str db 'qwertyuiopasdfghjklzxcvbnmfgjhserssdfgf'
.code
mov bx, 2
mov cx, 1
mov SI, offset str
label:
add cx, 1
cld
add SI, bx
cmp cx, 15
lodsb
jb label
ret
Для создания
событий удобно использовать диалог Add Procedure в меню Tools.
Пример 1: программа, которая будет
проверять нажатия некоторых клавиш. На форму ничего не размещать, вот код:
Private Sub Form1_KeyDown(ByVal sender As Object,
ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.Control = True And e.KeyCode = Keys.Q Then
MsgBox("Нажата Control и Q")
'
Если нажата клавиша Contro(вместо неё можно написать Alt
или Shift) и Q то выдаем сообщение
End Sub
Свойство KeyCode не умеет обрабатывать русские буквы.
Пример 2: Для обработки русских и прописных букв надо использовать событие KeyPress и свойство KeyChar. Вот код:
Private Sub Form1_KeyPress(ByVal sender As
Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles
MyBase.KeyPress
If e.KeyChar = "п"
Then MsgBox("Нажата клавиша: п")
' Если нажата клавиша 'п' то выводим сообщение
End Sub
Пример 3: сделаем программу, которая будет узнавать координаты курсора. На форме
размести 2 метки, и таймер(Interval=100, Enabled=True). Код:
Private
Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Timer1.Tick
' В метки записываем координаты курсора по оси
X и Y
Label1.Text = Cursor.Position.X
Label2.Text = Cursor.Position.Y
End Sub
Пример 4: Теперь сделаем программу, которая будет перемещать курсор. На форме разместить кнопку. Код программы:
Private Sub Button1_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button1.Click
' При нажатии на кнопку передвигаем
курсор(Point переводится как пункт, New - новый)
Cursor.Position = New Point(100, 100)
End Sub
У каждого
видимого объекта есть свойство Cursor. Оно нужно для того, чтобы при наведении
курсора на объект, у него менялся курсор.
Пример 5: Сейчас сделаем программу, в которой при наведении на текстовое поле
курсора, курсор менялся на стандартный курсор Hand. На форме разместите текстовое поле, код:
Private Sub Form1_Load(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' При загрузке формы, у текст. поля меняем
курсор на стандартный. Объект Cursors содержит все стандартные курсоры.
TextBox1.Cursor = Cursors.Hand
End Sub
Пример 6: пример того как можно скрыть курсор мыши.
ВАРИАНТ №1
СОЗДАЙТЕ
МОДУЛь.
Private Declare Function ShowCursor Lib
"user32" _
(ByVal bShow As Long) As Long
Const HIDE_CURSOR = (0)
Const SHOW_CURSOR = (1)
Public Function ShowCur()
Call ShowCursor(SHOW_CURSOR)
End Function
Public Function HideCur()
Call ShowCursor(HIDE_CURSOR)
End Function
СОЗДАЙТЕ ФОРМУ
Private Sub Command1_Click()
ShowCur 'Показываем курсор
End Sub
Private Sub Command2_Click()
HideCur 'Скрываем курсор
End Sub
ВАРИАНТ
№2
КОД ФОРМЫ
Private Declare Function ShowCursor Lib
"user32" _
(ByVal bShow As Long) As Long
Private Sub Command1_Click()
Call ShowCursor(0) 'Скрываем курсор
End Sub
Private Sub Command2_Click()
Call ShowCursor(1) 'Показываем курсор
End Sub
Пример 7: В этом примере представлены
коды основных клавиш. Например, у CTRL вообще не определяется ASCII код.
vbKeyF1 - От F1
...
vbKeyF12 - До F12
vbKeyA - От A
...
vbKeyZ - До Z(только английские буквы (заглавные
и обычные))
vbKeyBack - BackSpace
vbKeyInsert - Insert
vbKeyHome - Home
vbKeyPageUp - Page Up
vbKeyDelete - Delete
VbKeyEnd - End
VbKeyPageDown - Page Down
vbKeyNumlock - Num Lock
vbKeyCapital - Caps Lock
vbKeyEscape - Esc
vbKeyReturn - Enter
vbKeySpace - Пробел
vbKeyShift - Shift
vbKeyTab - TAB
VbKeyControl - CTRL
vbKeyMenu - ALT
VbKeyLeft - Стрелка влево
VbKeyRight - Стрелка в право
VbKeyDown - Стрелка в низ
VbKeyUp - Стрелка вверх
Код:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As
Integer)
If KeyCode = vbKeySpace Then MsgBox "Нажат пробел"
' Если нажат пробел то выскакивает сообщение
End Sub
Пример 8: Запрет ввода определенных
символов.
На форму добавим
текстовое поле, откроем код проекта, выберем текстовое поле и событие KeyPress.
Это событие наступает, когда нажата клавиша.
Внутри события
напишем этот текст:
Select Case KeyAscii
Case 0 To 192 - код
символа
Case Else
KeyAscii = 0
End Select
0 To 192 - код символа латинских символов.
Case Else - в
противном случае
KeyAscii = 0 - не
вводить дальше.
Запрещаем ввод латинских символов:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 192 To 256
Case Else
KeyAscii = 0
End Select
End Sub
Запретит всех
символов кроме номера, 0-9 :
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57
Case Else
KeyAscii = 0
End Select
End Sub
Задание 1: Написать программу, которая будет проверять нажатия
клавиш «S» и «Y».
Задание 2: Написать программу, которая обрабатывает нажатие
русских и прописных букв «A» и «д».
Задание 3: Создать программу, которая будет узнавать координаты
курсора, и выводить их в текстовые поля. Добавить на форму кнопку остановки
таймера.
Задание 4: Создать программу, в которой при наведении на кнопку
курсора, курсор менялся на стандартный курсор Hand.
Задание 5: Создать программу, которая выводит сообщение
«Нажата клавиша Shift» при нажатии клавиши Shift.
Контрольные вопросы:
1.
Какие
события обработки клавиатурных сообщений использовались в созданных вами программах?
2.
Какое
свойство курсора отвечает за его положение?
3.
Какое
свойство курсора отвечает за его скрытие?
4.
Как
запретить ввод латинских символов?
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.