Пару операторов N = N + 1
If N = 4 Then N = 0 можно заменить одним изящным оператором N = (N + 1) Mod 4
Вы можете как угодно улучшать мультик, например, пусть сзади человечка медленно едет автомобиль.
Задание 109: "Улыбка". Для тех, кто умеет рисовать. Попросите у своей знакомой ее фотографию, где она снята с серьезным выражением лица. Введите фото в компьютер. Сделайте в Paint, а лучше в FotoShop еще два-три кадра этого фото, аккуратно понемножку приподнимая уголки губ на изображении. Подумайте, в какой последовательности нужно показывать кадры, чтобы улыбка постепенно возникала и исчезала.
О прозрачном цвете
Конечно, вам бы хотелось, чтобы человечек шел не по белому экрану, а по улице (фотография улицы). Но здесь вы столкнетесь с проблемой: человечек будет обрамлен белым прямоугольником фона, в котором вы его рисовали. Хорошо бы можно было сделать белый (или любой другой) цвет прозрачным. Но это нетривиальная проблема и в курсе для начинающих ее не стоит решать.
До сих пор в режиме работы проекта мы пользовались мышкой только для того, чтобы примитивно нажимать на кнопки, а клавиатурой — только для ввода текста в текстовые поля. Однако, Visual Basic позволяет мышью и клавиатурой делать все те вещи, которые мы делаем ими в любых графических и текстовых редакторах, играх и других приложениях Windows. В том числе, мы можем с их помощью управлять поведением и движением объектов на форме.
Работа с мышью
Создадим программу на определение точности руки и глаза: При нажатии кнопки возникает в случайном месте экрана и тут же исчезает маленькая окружность. Вы должны поточнее щелкнуть мышкой там, где она была. После щелчка компьютер сообщает вам, на каком расстоянии от центра окружности было острие мышиного курсора во время щелчка.
Для создания программы нам необходимо поближе познакомиться с событиями, возникающими при работе с мышью. Заглянем в "универсальный справочник" Object Browser. Поскольку щелкать мышью мы будем над формой, то в левой части Object Browser выберем объект Form. В правой части отыщем события, связанные с мышью. Нас пока интересует пять событий: Click (щелчок), DblClick (двойной щелчок), MouseDown (нажали клавишу мыши), MouseUp (отпустили клавишу мыши), MouseMove (сдвинули мышь).
События Click и DblClick нам не подойдут, так как они ничего не говорят о координатах мыши во время щелчка. А вот MouseDown подойдет, так как координаты сообщает. А при щелчке события MouseDown и MouseUp обязательно наступают, так как любой щелчок это не что иное, как нажатие и отпускание.
События MouseDown и MouseUp
Зайдем в окно кода и выберем для объекта Form событие MouseDown. В окне кода появится следующая заготовка:
Private Sub Form_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
End Sub
4 параметра в скобках — это 4 вещи, которые компьютер сообщает процедуре в момент события:
Button — какая из трех кнопок мыши была нажата
Shift — были ли при этом в нажатом состоянии служебные клавиши на клавиатуре и какие именно
X, Y — координаты острия курсора мыши во время нажатия
Для того, чтобы понять и проверить смысл этих параметров, прочтите (чтобы понять) и запустите (чтобы проверить) такую программу:
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'Определяем, какая клавиша мыши нажата:
Select Case Button
Case 1: Debug.Print "Нажата левая клавиша"
Case 2: Debug.Print "Нажата правая клавиша"
Case 4: Debug.Print "Нажата средняя клавиша"
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 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 работает аналогично.
Пример программы:
27
Когда я проверял этот пример, оказалось, что правая клавиша Alt ведет себя не так, как положено.