Онлайн
библиотека книг
Книги онлайн » Разная литература » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Закладка:

Сделать
1 ... 177 178 179 180 181 182 183 184 185 ... 192
Перейти на страницу:
клавиша Shift"

Case 2: Debug.Print "Нажата клавиша Ctrl"

Case 3: Debug.Print "Нажаты клавиши Shift, Ctrl"

Case 4: Debug.Print "Нажата клавиша Alt"

Case 5: Debug.Print "Нажаты клавиши Shift, Alt"

Case 6: Debug.Print "Нажаты клавиши Ctrl, Alt"

Case 7: Debug.Print "Нажаты клавиши Shift, Ctrl, Alt"

End Select

'Определяем координаты острия курсора мыши во время нажатия:

Debug.Print "Х="; X, "Y="; Y

End Sub

В численном значении Shift есть система. Посмотрите в процедуре, чему "равны" клавиши Shift, Ctrl, Alt по одиночке. 1, 2 и 4. Так вот, их совместное нажатие "равно" их сумме. Убедитесь.[27]

Поместите на форму несколько разных объектов. Обратите внимание, что при щелчке по ним процедура не срабатывает. Это естественно, у каждого объекта есть свое событие MouseDown.

Событие MouseUp работает аналогично.

Пример программы:

Вот программа для поставленной выше задачи на точность руки и глаза:

Dim Х_кружка As Integer

Dim Y_Kpy>KKa As Integer

Dim Расстояние_до_кружка As Double

Private Sub Form_Load()

Randomize

End Sub

'Процедура для создания мелькнувшего кружка:

Private Sub Command1_Click()

Х_кружка = 4000 * Rnd 'Определяем координаты кружка (центра кружка)

Y_кружка = 4000 * Rnd

ForeColor = vbBlack 'Чертим кружок черным цветом

Circle (Х_кружка, Y_кружка), 50

For i = 1 То 3000000: Next 'Пауза, чтобы мы успели заметить кружок

ForeColor = BackColor 'Стираем кружок цветом фона

Circle (Х_кружка, Y_Kpy>KKa), 50

End Sub

'Процедура для определения расстояния от щелчка до кружка:

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Расстояние_до_кружка = Sqr ((X — Х_кружка) A 2 + (Y — Y_кружка)^2)

MsgBox ("Промах на " & Int(Расстояние_до_кружка) & " твип.")

End Sub

Пояснение того, как вычислялось расстояние (для тех, кто знает теорему Пифагора): Мысленно соедините отрезком прямой центр окружности и точку щелчка.

Это будет гипотенуза прямоугольного треугольника, катеты которого проведите вертикальной и горизонтальной линией. Нетрудно заметить, что горизонтальный катет равен X — Х_кружка, а вертикальный равен Y — У_кружка (знак я не учитываю). Гипотенуза же равна нужному нам расстоянию. Теорема Пифагора гласит, что квадрат гипотенузы равен сумме квадратов катетов. Отсюда, гипотенуза равна корню квадратному из суммы квадратов катетов (каковая формула и записана в программе).

Событие MouseMove

Это событие возникает, как только мы сдвигаем мышку с места, а во время движения мыши оно возникает постоянно и многократно. Оно похоже на событие MouseDown, но есть и отличия. Запустите и проверьте эту поясняющую программу:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

'Определяем, какие клавиши мыши удерживаются нажатыми во время движения:

Select Case Button

Case 0: Debug.Print "He нажата ни одна клавиша мыши"

Case 1: Debug.Print "Нажата левая клавиша"

Case 2: Debug.Print "Нажата правая клавиша"

Case 3: Debug.Print "Нажаты левая, правая клавиши"

Case 4: Debug.Print "Нажата средняя клавиша"

Case 5: Debug.Print "Нажаты левая, средняя клавиши"

Case 6: Debug.Print "Нажаты правая, средняя клавиши"

Case 7: Debug.Print "Нажаты левая, правая, средняя клавиши"

'Определяем, какие из трех клавиш клавиатуры (Shift, Ctrl, Alt) удерживаются нажатыми во время движения:

Select Case Shift

Case 0: Debug.Print "He нажата ни одна клавиша Shift, Ctrl, Alt'

Case 1: Debug.Print "Нажата клавиша Shift"

Case 2: Debug.Print "Нажата клавиша Ctrl"

Case 3: Debug.Print "Нажаты клавиши Shift, Ctrl"

Case 4: Debug.Print "Нажата клавиша Alt"

Case 5: Debug.Print "Нажаты клавиши Shift, Alt"

Case 6: Debug.Print "Нажаты клавиши Ctrl, Alt"

Case 7: Debug.Print "Нажаты клавиши Shift, Ctrl, Alt"

End Select

'Определяем, координаты острия курсора мыши во время движения:

Debug.Print "Х="; X, "Y="; Y

End Sub

Если событие MouseDown сообщает о нажатии какой-то одной клавиши мыши, то MouseMove сообщает о любой комбинации мышиных клавиш. Если событие MouseDown сообщает о событии нажатия какой-то клавиши, то MouseMove сообщает о состоянии мышиных клавиш (удерживаются нажатыми или нет).

Мышь рисует

Вот программа, превращающая мышку в карандаш:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

PSet (X, Y)

End Sub

Запустите ее и медленно ведите мышкой по форме. За мышкой остается нарисованный след.

Задание 110: Сделайте так, чтобы мышь рисовала только при нажатой левой клавише, что более привычно для всех, кто работал в графических редакторах.

Задание 111: Сделайте так, чтобы при щелчке по правой клавише толщина линии возрастала на 1.

Работа с клавиатурой

Поставим задачу сделать игру, где наш миниатюрный гоночный автомобиль будет под управлением клавиш клавиатуры нестись от старта до финиша. Для этого вам нужно познакомиться с событиями, связанными с клавиатурой. Их три: KeyDown (клавиша нажата), KeyUp (клавиша отпущена) и KeyPress.(по клавише щелкнули). Нас пока интересуют только первые два.

События KeyDown и KeyUp

Создайте проект из одной формы, без элементов управления. Зайдите в окно кода и выберите для объекта Form событие KeyDown. В появившуюся заготовку процедуры запишите следующий код:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

'Определяем, какая клавиша клавиатуры была нажата:

Select Case KeyCode

Case vbKeyUp: Debug.Print "Нажата стрелка вверх"

Case vbKeyDown: Debug.Print "Нажата стрелка вниз"

Case vbKeyLeft: Debug.Print "Нажата стрелка налево"

Case vbKeyRight: Debug.Print "Нажата стрелка направо"

Case vbKeyW: Debug.Print "Нажата клавиша W"

Case vbKey7: Debug.Print "Нажата клавиша 7"

Case vbKeySpace: Debug.Print "Нажата клавиша пробела"

Case vbKeyDelete: Debug.Print "Нажата клавиша Delete"

Case vbKeyF4: Debug.Print "Нажата клавиша F4"

Case vbKeyAdd: Debug.Print "Нажата клавиша +"

Case vbKeyEscape: Debug.Print "Нажата клавиша Esc"

End Select

'Определяем, какие из трех клавиш клавиатуры (Shift, Ctrl, Alt) при этом были в нажатом состоянии:

Select Case Shift

Case 0: Debug.Print "He нажата ни одна клавиша Shift, Ctrl, Alt

Case 1: Debug.Print "Нажата клавиша Shift"

Case 2: Debug.Print "Нажата клавиша Ctrl"

Case 3: Debug.Print "Нажаты клавиши Shift, Ctrl"

Case 4: Debug.Print "Нажата клавиша Alt"

Case 5: Debug.Print "Нажаты клавиши Shift, Alt"

Case 6: Debug.Print "Нажаты клавиши Ctrl, Alt"

Case 76 Debug.Print "Нажаты клавиши Shift, Ctrl,

1 ... 177 178 179 180 181 182 183 184 185 ... 192
Перейти на страницу: