Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб14_VisualBasic.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
595.97 Кб
Скачать

2. Упражнения

Упражнение 1

Создадим приложение, имитирующее действия Корзины путём перетаскивания в неё объекта. Восстановление объекта происходит при двойном щелчке по корзине.

Реализация проекта

1. Создайте новый проект. В качестве корзины и объекта будем использовать элементы управления Image. В качестве рисунков пустой и полной корзины можно использовать файлы с расширением .ico, в качестве объекта для перемещения – рисунок компакт-диска. Соответствующие рисунки нужно скопировать в папку с данным проектом. При запуске приложения корзина изображена пустой, затем в Image будет загружен рисунок с изображением полной корзины методом LoadPicture (рис. 14.2).

Рис. 14.2

2. Разместите на форме надпись Label1 (Положи компакт-диск в корзину!), кнопку Command1 (Выход), 2 элемента управления Image (в один поместить изображение компакт-диска, в другой – пустой корзины).

Обозначения:

  • Mx, My – координаты перемещаемого объекта;

  • P – переменная логического типа, определяющая, пустая корзина или полная.

3. Программный код приложения:

Option Explicit

Dim Mx As Single, My As Single, P As Boolean

Private Sub Form_Load() 'загрузка формы

P = False 'признак пустой корзины

End Sub

Private Sub Command1_Click() 'Выход

End

End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

If Button = 1 Then 'если нажата левая кнопка мыши

Image1.Drag vbBeginDrag 'начало перетаскивания

Mx = X

My = Y

'при перетаскивании картинки, курсор становиться этой картинкой

Image1.DragIcon = Image1.Picture

End If

End Sub

Private Sub Image2_DragDrop(Source As Control, X As Single, Y As Single)

'завершение перетаскивания объекта в корзину

Source.Visible = False 'компакт-диск стал невидим

P = True 'признак полной корзины

'рисунок полной корзины

Image2.Picture = LoadPicture(App.Path & "\RECYFULL.ICO")

Label1.Caption = "Достань компакт-диск из корзины!!!" 'изменили надпись

End Sub

Private Sub Image2_DblClick() 'извлечение объекта из корзины

Image1.Visible = True 'компакт-диск стал видимым

P = False 'признак пустой корзины

'загрузить рисунок пустой корзины

Image2.Picture = LoadPicture(App.Path & "\WASTE.ICO")

Label1.Caption = "Положи компакт-диск в корзину!" 'изменили надпись

End Sub

'Завершение перетаскивания объекта на форме с учётом поправки

'(необязательная процедура)

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

Source.Move (X - Mx), (Y - My)

End Sub

При автоматическом перетаскивании элемента по форме при завершении операции его левый верхний угол будет находиться в той точке, где располагался указатель при отпускании кнопки мыши, независимо от того, где он находился на элементе в начале перетаскивания. Для того, чтобы конечное расположение совпадало с контуром, который отображается по умолчанию при перетаскивании (или с изображением, установленным в свойстве DragIcon), необходимо ввести поправку. После установления ручного режима становится возможным определение координат точки, в которой находился указатель в начале перетаскивания путём обработки события MouseDown для соответствующего элемента, что позволяет откорректировать параметры метода Move.

4. Сохраните и протестируйте проект.

Упражнение 2

Разработаем приложение «Пазлы». Исходный рисунок разбит на 4 части. Необходимо сложить его на пустом поле, разбитом на 4 части. Исходный вид формы показан на рисунке 14.3.

Реализация проекта

1. Предварительная подготовка к работе: в любом графическом редакторе разбить произвольный рисунок на 4 части и сохранить в разных файлах (Ris1.bmp, Ris2.bmp, Ris3.bmp, Ris4.bmp). Например, в Paint можно использовать команду ПРАВКА – Копировать в файл. Не изменяйте пропорций рисунков. Создайте ещё один рисунок Ris5.bmp – квадрат с однотонной заливкой (будем использовать его в качестве фона, когда необходимо скрыть предыдущие рисунки).

Рис. 14.3

2. Создайте новый проект и разместите на форме следующие элементы управления:

  • метка Label1 (Собери картинку по образцу!);

  • 4 командные кнопки: Command1 (Выход), Command12 (Проверка), Command3 (Сброс), Command4 (Справка);

  • поле Image1 – поместить исходный рисунок для образца;

  • поля Image2 и Image3 – создать как массивы из 4-х элементов каждый (с индексами 0, 1, 2, 3), установить у каждого свойство Strech = True. В поле Image2 необходимо будет собрать рисунок. Первоначально там загружен пустой фон, поэтому в свойстве Picture полей Image2 нужно указать путь к фоновому рисунку Ris5.bmp. В свойстве Picture полей Image3 указать путь к рисункам (Ris1.bmp, Ris2.bmp, Ris3.bmp, Ris4.bmp). Файлы с рисунками скопируйте предварительно в папку с вашим проектом, тогда не нужно будет указывать полный путь к файлам, достаточно указать имя файла;

  • метка Label2 – для вывода справки (установите свойство Visible = True, чтобы при запуске проекта метка была невидима);

  • таймер Timer1 – первоначально таймер выключен. Он будет включаться по кнопке «Справка» и через заданный интервал времени скрывать текст, который выведен в метке Label2 (установите свойства таймера Interval = 8000, Enabled = False).

3. Программный код.

Option Explicit

Dim Mx As Single, My As Single, Path As String, A(0 To 3) As Integer

Dim k As Integer, i As Integer, j As Integer, t As Integer

'Массив А - для хранения номеров перемещённых картинок

'Mx, My – координаты объекта при перемещении

'Path – путь к файлу с рисунком

'k - количество верных ответов

't - номер рисунка, который нужно вернуть на место

Private Sub Form_Load() 'загрузка формы

For i = 0 To 3

A(i) = -1 'заполнение массива -1 – признак того,

'что соответствующие поля Image2 пустые

Next

End Sub

Private Sub Image3_MouseDown(Index As Integer, Button As Integer, _

Shift As Integer, X As Single, Y As Single)

If Button = 1 Then

Image3(Index).Drag vbBeginDrag 'начало перетаскивания рисунка

Mx = X

My = Y

End If

'запоминаем индекс поля в Image3, из которого перемещаем рисунок

i = Index

If i = 0 Then Path = "Ris1.bmp" 'путь к рисунку

If i = 1 Then Path = "Ris2.bmp"

If i = 2 Then Path = "Ris3.bmp"

If i = 3 Then Path = "Ris4.bmp"

End Sub

Private Sub Image2_DragDrop(Index As Integer, Source As Control, _

X As Single, Y As Single) 'завершение перетаскивания

Source.Visible = False

Image2(Index).Picture = LoadPicture(Path)

'запомнить номер перемещённого рисунка в массиве А

j = Index: A(j) = Val(Mid$(Path, 4, 1)) - 1

End Sub

Private Sub Image2_DblClick(Index As Integer)

'Возвратить картинку на место по двойному щелчку по рисунку

Image2(Index).Picture = LoadPicture("Ris5.bmp") 'загружаем пустой фон

t = A(Index) 'запоминаем номер рисунка, который нужно вернуть на место

Image3(t).Visible = True 'делаем рисунок с номером t видимым

End Sub

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

'Поправка

Source.Move (X - Mx), (Y - My)

End Sub

Private Sub Command1_Click() 'Выход

End

End Sub

Private Sub Command2_Click() 'Проверка

k = 0 'количество верных ответов

For i = 0 To 3

'индекс в массиве рисунков должен совпадать с номером рисунка

If Image2(i).Index = A(i) Then k = k + 1

Next

If k = 4 Then

Label1.Caption = "Игра завершена!!! Верных ответов - " & Str(k)

Else

Label1.Caption = "Попробуй еще раз!!! Верных ответов - " & Str(k)

End If

End Sub

Private Sub Command3_Click() 'Сброс

Label2.Visible = False

For i = 0 To 3

Image3(i).Visible = True 'восстанавливаем все рисунки

Image2(i).Picture = LoadPicture("Ris5.bmp") 'загружаем пустой фон

A(i) = -1 'в массив заносим -1 - признак пустого поля

Next

Label1.Caption = "Собери картинку"

End Sub

Private Sub Command4_Click() 'Справка

'метка становится видимой и появляется текст справки

Label2.Visible = True

Label2.Caption = "Перемещайте картинки при нажатой левой кнопке мыши в нужные клетки. При двойном щелчке по картинке она вернётся на прежнее место!"

Timer1.Enabled = True 'включаем таймер

End Sub

Private Sub Timer1_Timer() 'Таймер

Label2.Visible = False 'скрыть текст справки

End Sub

4. Сохраните и протестируйте проект.

Упражнение 3*

Разработаем проект «Расположить объекты в хронологическом порядке». В данном задании будем работать с массивами меток. Перемещаемыми объектами здесь являются метки с надписями. При первоначальной загрузке должны быть доступны только кнопки «Пуск» и «Выход» (рис. 14.4). После нажатия на «Пуск» становятся доступны все кнопки (рис. 14.5). По кнопке «Проверка» выводится количество правильных ответов (рис. 14.6). Кнопки должны быть снабжены всплывающими подсказками.

Рис. 14.4

Рис. 14.5

Рис. 14.6

Программный код:

Option Explicit

Dim i As Integer, k As Integer, Text As String, Mx As Single, My As Single

Private Sub Command1_Click() 'Пуск

Frame1.Visible = True

Frame1.Enabled = True

For i = 0 To 3

Label2(i).Enabled = True

Next

Label5.Visible = False

Label6.Visible = False

Command2.Enabled = True

Command4.Enabled = True

End Sub

Private Sub Label2_MouseDown(Index As Integer, Button As Integer, _

Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then

Call Label2(Index).Drag(vbBeginDrag) 'начало перемещения

Mx = X

My = Y

End If

i = Index 'индекс метки в массиве, которую перемещаем

If i = 0 Then Text = "компьютер"

If i = 1 Then Text = "счёты"

If i = 2 Then Text = "калькулятор"

If i = 3 Then Text = "абак"

End Sub

Private Sub Label4_DragDrop(Index As Integer, Source As Control, _

X As Single, Y As Single) 'завершение перетаскивания

Label4(Index).Caption = Text

End Sub

Private Sub Command2_Click() ' Проверка

k = 0

If Label4(0).Caption = Label2(3).Caption Then k = k + 1

If Label4(1).Caption = Label2(1).Caption Then k = k + 1

If Label4(2).Caption = Label2(2).Caption Then k = k + 1

If Label4(3).Caption = Label2(0).Caption Then k = k + 1

Label5.Visible = True

Label6.Visible = True

Label6.Caption = Str(k)

End Sub

Private Sub Command3_Click() 'Выход

End

End Sub

Private Sub Command4_Click() 'Сброс

For i = 0 To 3

Label4(i).Caption = ""

Next

k = 0

Label6.Caption = ""

Command4.Enabled = False

Command2.Enabled = False

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]