Программирование на Visual Basic

Visual Basic drag and drop

Что такое Drag-and-Drop

 

Каждыйраз, работая в Windows, мы сталкиваемсяс технологией Drag & Drop. Перетаскивая файлы и папки, кнопки, ярлыки,пиктограммы мы работаем с Drag & Drop. Можно сказать, что на этой технологии построена работа в Winde. Я думаю, что многим из вас хотелось бы сделатьпрогу с «перетаскиванием», тем более что Visual Basic предоставляет этувозможность. Далее я приведу несколько примеров по этой теме. Разработкупримеров я вел на 6 Бейсике. Возможно,в моих примерах будет много глюков и неточностей, прошу меня простить за это,так как я сам только начал учить «перетаскивание», но все же кое-чему полезному вас научу.

 

DragDropи DragOver - в Visual Basic’e

 

В Бейсикевстроены события «перетаскивания»: DragDrop; DragOver

Первое происходит при отпускании перетаскиваемогообъекта над объектом получателем, второе при перетаскивании объекта надобъектом получателем. Небольшая белиберда, но надеюсь дальше станетпонятнее. Ну что, к следующему шагу,там будет несколько примеров.

Примеры с DragDrop DragOver

Начнем какобычно с простейшего. Создаем новый проект Standart Exe, кидаем на форму 2 текстовых поля и Image с именами Text1, Text2 и Image1. В Image суем маленькую картинкуили иконку (можете взять мою), свойствоDragMode устанавливаемкак 1-Automatic (контуркартинки начинает перетаскиваться), из текстовых полей удаляем текст, свойствоText = “”.

Форма должнавыглядеть приблизительно вот так:

 

Наверху 1 текстовое поле,внизу соответственно второе.

 

Приступим к коду программы.Кликаем по 1 текстовому полю, у нас открывается событие Change, оно намненужно, выбираем событие DragDrop и вписываем туда такой код:

Private Sub Text1_DragDrop(Source As Control, X AsSingle, Y As Single)

Text1.Text = "Это событиеDragDrop" "при отпускании на текстовом поле Imaga в это _

текстовое поле вставляем текст

End Sub

Запускаемпрограмму, нажав F5,кликаем по картинке и не отпуская кнопки мыши, тащим ее на 1 текстовое поле и очудо, в нем появляется текст.

Теперьпоиграемся с событием DragOver.Кликаем по второму текстовому полю, выбираем событие DragOver, и пишем там такой текст:

Private Sub Text2_DragOver(Source As Control, X AsSingle, Y As Single, State As Integer)

Text2.Text ="Это событие DragOver""при перетаскивании картинки по _

полю внего вставляется текст

End Sub

Ну, напервый урок достаточно я вас грузанул. Исходник качай здесь. Идемдальше...

 

Создаем простую игру с DragDrop

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

И так начнемсоздавать ИНТЕРФЕЙС гейма, куда ж без него. Ну хватит болтовни, приступаем к делу: у формы устанавливаем свойство ScaleMode = Pixel; кидаем на форму три PictureBox’а с именами Picture1, Picture2,Picture3 свойство AutoSize у них устанавливаемкак True, ScaleMode = Pixel , в Picture2 ставим картинкупоезда идущего вправо, свойство Visible= False, в Picture3 идущего в лево,свойство Visibleустанавливаем как False,Picture1 оставим безкартинки; один image сименем image1 скартинкой машинкой и свойством DragMode= Automatiс; один Lebel с Caption = “” (шрифт, его размер и цвет вметке на ваше усмотрение); 2 таймера с интервалами равными 100, у второготаймера свойство Enabled= False. Ну вроде синтерфейсом закончили, оставляю вам право самим до украшать прогу. У меняполучилось примерно так:

 

 

Приступим к самому интересномуНАПИСАНИБ КОДА НА БЕЙСИКЕ.

При загрузке формы устанавливаемследующие параметры:

Private Sub Form_Load()

Image1.DragIcon = Image1.Picture" При перетаскивании картинки, курсор становиться этой картинкой

Picture1.Picture = Picture2.Picture "копируем правый поезд

End Sub

Теперь надосделать так, чтобы наш поезд двигался влево и вправо до конца. Для этого у насесть два таймера. Поезд будем двигатьпростейшим способом, передвигая Picture1по форме (это свойство Left Picture Boxa). Схема переключенийтаймеров такова: первый таймер включается и тащит поезд от 0 до 400 пикселейформы, потом он выключается сам и включает второй таймер который двигаеткартинку от 400 до 0 пикселей формы. Также они меняют картинку поезда с лева направо и наоборот. Текст передвижения поезда:

Private Sub Timer1_Timer()

If Picture1.Left < 400 Then " (от 0 до 400)

Picture1.Left = Picture1.Left + 20 "передвигаем _

картинку на 20 пикселей вперед

Else "если картинка дошла доконца

Picture1.Picture = Picture3.Picture "меняем картинку поезда

Timer2.Enabled = True "включаем второй таймер

Timer1.Enabled = False "выключаем первый таймер

End If

End Sub

 

Private Sub Timer2_Timer()

If Picture1.Left > 0 Then "(от 400 до 0)

Picture1.Left = Picture1.Left - 20 "передвигаем картинку_

на 20пикселей назад

Else"если картинка пришла в начало

Picture1.Picture = Picture2.Picture "меняем картинку поезда

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

Timer2.Enabled = False "выключаем второй таймер

End If

End Sub

Запустимпроект, нажав F5 и очудо, поезд едет вперед и назад, причем картинка меняется, когда поезд едетвправо и влево. Нажимая и перетаскивая Image, мы тащим не его контур, а саму картинку (это свойствоDragIcon). Если у васполучилось так гладко как у меня, идем дальше.

Теперьприступим к самому основному к перетаскиванию Imagа в Picture1. Вот тут, наконец пойдут события DragDrop.

Чтобызасунуть машинку в поезд надо перетащить и отпустить на Picture1 Image1. Тут работает событие DragDrop. кликаем по поезду(это Picture1) ивыбираем событие DragDropи пишем туда следующий текст:

Private Sub Picture1_DragDrop(Source As Control, X AsSingle, Y As Single)

Picture1.Picture = Image1.Picture "при прохождении надPicture1 image1 _

вставляемв Picture1картинку из image1

End Sub

Запускаемпроект и перетаскиваем машинку на идущий поезд (точно на поезд, а не на форму)и о чудо на месте поезда появляется машинка. Но что делать, если вы не попалина идущий поезд, а рядом с ним? Будем ставить машинку туда, где мы ееотпустили. Кликаем по форме, выбираем событие DragDrop, пишем туда такой текст:

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

"вставляеммашинку в то место формы, куда мы кликнули

Image1.Left= X "положение по оси Х

Image1.Top = Y "по оси Y

End Sub

Сперетаскиванием закончили. Теперь надо сделать так, чтобы при правильномпопадании в поезд машинкой в метке писался текст: «Ура!!! Вы сунули машинку впоезд». Для этого модернизируем текст в Picture1_ DragDrop:

Private Sub Picture1_DragDrop(Source As Control, X AsSingle, Y As Single)

Picture1.Picture = Image1.Picture "при прохождении над Picture1 image1 _

вставляемв Picture1 картинку из image1

Label1.Caption = "Ура!!! Вы сунули машинку в поезд." "при _

отпусканиимашинки на поезде в метку _

вставляемследующий текст

End Sub

Ну и наконецсделаем так, чтобы кода поезд дошел до конца, или вернулся в начало текст вметке отчищался. Необходимо будет модернизировать текст в таймерах. Я приведу изменения программноготекста только в первом таймере, во втором делается абсолютно тоже самое:

Private Sub Timer1_Timer()

If Picture1.Left < 400 Then " (от 0 до 400)

Picture1.Left = Picture1.Left + 20 "передвигаем _

картинкуна 20 пикселей вперед

Else"если картинка дошла до конца

Picture1.Picture = Picture3.Picture "меняем картинку поезда

Label1.Caption= "" "чистим текст в метке

Timer2.Enabled= True "включаем второй таймер

Timer1.Enabled= False "выключаем первый таймер

End If

End Sub

Ну все, игразакончена. Тут Исходник. Надеюсь,вам понравилась моя статья, и вы не напрасно провели время у компа. Своипожелания, замечания, стати и прочие материалы шлите мне на мыло ashdan87@mail.ru .

PS:

Это мояпервая статья. Поэтому не судите меня сильно строго ПЛИЗ.

автор:Ашот Даниелян

мыло:ashdan87@mail.ru

сайт:http://ashdan87.narod.ru/index1.html

г.Пятигорск

29мая 2003 г.

Hosted by uCoz