- •Лабораторная работа 29 «Приемы анимации»
- •Краткие теоретические сведения. Перемещение объектов с помощью клавиатуры.
- •Метод Move
- •Перемещение объектов с помощью полос прокрутки
- •Перемещение объектов с помощью мыши
- •Анимация без использования таймера
- •6. Литература:
- •Задание:
- •Содержание отчета:
- •Контрольные вопросы:
Перемещение объектов с помощью мыши
Выполнение большинства команд в приложениях для Windows осуществляется щелчком по соответствующей кнопке. Для выполнения ряда действий в языке Visual Basic предусмотрена также операция Drag and Drop (Перетащить и Оставить). Для ее осуществления пользователь должен поместить фокус мыши на объекте, нажать левую кнопку мыши и, удерживая ее нажатой, перетащить объект на новое место, а затем отпустить кнопку мыши.
Перемещаемый объект будем называть объектом-источником, а объект, над которым освобождается объект-источник, объектом-целью.
Для того чтобы в режиме выполнения приложения объект можно было перетаскивать на новое место, следует задать его свойству DragMode (Режим перетаскивания) значение 1-Automatic, а свойству Enable — значение, равное True.
Вид указателя мыши при перетаскивании может быть задан с помощью свойства Draglcon (Значок при перетаскивании). Если объект-источник остается на другом объекте-цели, с последни объектом происходит событие DragDrop. При перетаскивании объекта-источника через другой объект с последним происходит событие DragOver.
Рассмотрим заголовок процедуры обработки события DragDrop:
Private Sub O6ъeктЦель_DragDrop([Index As Integer,] Source As _Control, X As Single, Y As Single)
Здесь
ОбъектЦель — имя объекта, с которым связано событие DragDrop
Index — переменная, которая используется только в том случае, если сбъект-цель является элементом массива объектов;
Source — переменная, которая равна объекту-источнику, “захваченному” мышью;
X и Y — координаты курсора мыши в момент наступления события DragDrop относительно верхнего левого угла объекта-цели. Если объектом-целью является форма или графическое окно, то координаты задаются в тех единицах, которые заданы свойством ScaleMode
Анимация без использования таймера
Алгоритм создания движущегося изображения в языке Basic:
стереть прежнее изображение;
вычислить координаты нового изображения;
нарисовать новое изображение;
выполнить задержку времени пустым циклом;
перейти к пункту 1.
Анимация с использованием таймера и метода Move
Таймер (Timer) - это объект, способный инициировать события через регулярные промежутки времени.
Таймер программируют присвоением определенных значений (в миллисекундах) свойству Interval; тем самым задают периодичность возникновения событий, связанных с таймером. Интервал (в миллисекундах) между двумя событиями может принимать любые значения в диапазоне от 0 до 65535. Интервал, равный нулю, отключает таймер. Если вам нужно, чтобы события от таймера возникали п раз в секунду, то для подсчета значений свойства Interval можно пользоваться формулой 1000/n. Например, чтобы система генерировала события таймера два раза в секунду, в свойство Interval надо записать число 500 (т.е. 1000/2). Когда доступ к таймеру разрешен, событие Timer генерируется через равные промежутки времени.
Анимация с использованием таймера и метода PaintPicture
Самый простой способ создания анимации - использовать стандартные средства Visual Basic - поочередно прорисовывать картинки на форме или PictureBox методом PaintPicture.
Метод PaintPicture обеспечивает возможность копировать графическое изображение из объекта-источника (Form, PictureBox, Image) в объект-приемник (Form, PictureBox, Printer).
Формат метода
[Приемник.] PaintPicture Источник [Хпр, Ynp, Wnp, Нпр, Хис, Уис, Wиc, Нис, Ор]
Здесь
Приемник — объект, в который копируется изображение;
Источник — свойство Picture объектов Form, PictureBox, Image;
Хпр, Ynp — числа или числовые выражения типа Single, задающие координаты левой верхней вершины прямоугольника на объекте-приемнике, в который копируется изображение;
Wnp, Нпр — числа или числовые выражения типа Single, задающие соответственно ширину и высоту прямоугольника на объекте-приемнике, в который копируется изображение. Если параметры не соответствуют размерам объекта-источника, рисунок растягивается или сжимается. Если параметры пропущены, сохраняется размер рисунка-источника. Если один или оба параметра отрицательные, изображение переворачивается относительно вертикальной, горизонтальной или обеих осей;
Хис, Уис — числа или числовые выражения типа sing1е, задающие координаты левой верхней вершины прямоугольника на объекте-источнике из которого берется изображение. Если параметры пропущены, берется точка с координатами (0,0);
Wис, Нис — числа или числовые выражения типа sing1е, задающие соответственно ширину и высоту прямоугольника на объекте-источнике, из которого берется изображение. Если они меньше размеров рисунка- источника, копируется его часть. Если параметры пропущены, копируется рисунок;
Ор — параметр, определяющий логическую операцию (and, xor и др.), которая выполняется при копировании изображения.
Все размеры и координаты задаются в тех единицах, которые заданы свойством ScaleMode.
Создание проекта
Проект, в котором осуществляется движение шарика горизонтально от левого края формы до
правого.
Этап создания экранной формы
Рисование происходит на экранной форме. На форме расположена только одна командная кнопка.
Этап создания программного кода
Private Sub Command1_Click()
D
im
x, y, i, r As Integer
DrawWidth = 2
Scale (0, 100)-(100, 0)
x = 2: y = 70: r = 5
FillStyle = 0
FillColor = vbGreen
Do
Cls
x = x + 1
Circle (x, y), r, vbRed
For i = 1 To 1000000: Next i
Loop While x <= 97
End Su
П
роект,
с использованием объекта Timer,
перемещение графического объекта из
правого нижнего угла в левый верхний.
Этап создания экранной формы
Рисование происходит на экранной форме. На форме расположены: Timer и Image. Установим значения свойств Name для изображения – I1. Значение Stretch объекта Image ровное Тгuе, Visible – False. С помощью окна свойств разместите в нем готовый рисунок. Для Timer установите значение свойства Interval -60.
Этап создания программного кода
P
rivate
Sub Timer1_Timer()
I1.Visible = True
If I1.Top > 0 Then
If I1.Left > 0 Then
I1.Move I1.Left - 70, I1.Top - 50
I1.Width = I1.Width + 5
I1.Height = I1.Height + 5
End If
Else
Timer1.Enabled = False
End If
End Sub
