Любимым занятием
пользователей Windows является Drag & Drop,
так почему же не украсить свои приложения красиво
перетаскиваемыми объектами.
Для простого
примера создайте форму, разместите на ней картинку Image1
и добавьте следующий код:
Private Sub
Form_Load()
Image1.DragIcon = Image1.Picture
' При
перетаскивании картинки, курсор становиться этой картинкой End Sub
Private Sub
Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Image1.Drag vbBeginDrag '
Перетаскивание можно осуществлять нажав любую кнопку, хоть третью если есть. Image1.Visible = False '
Так эффект лучше смотрится, словно картинку взяли и унесли. End Sub
Private Sub
Form_DragDrop(Source As Control, X As Single, Y As Single)
Image1.Move X, Y
' Мы перемещаем
иконку туда, где отпустили кнопку, на форме. Image1.Visible = True
' Ну и делаем
видимой картинку End Sub
Вот такой
простенький пример.
Поместите на форме
PictureBox, названый Picture1, еще
две картинки, одну назовите Yes, а другую No.
Теперь присвойте картинке yes - иконку,
которая показывает, что сюда объект поместить можно, а в No,
что сюда объект помещать нельзя.
Теперь
модифицируем имеющийся код, да и добавим немного.
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
Image1.Move X, Y
Image1.Visible = True
End Sub
Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single)
Image1.Drag vbBeginDrag
Image1.Visible = False
End Sub
Оставили события
DragOver формы и MouseDown
картинки нетронутыми.
Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
Image1.Visible = True
'Если отпустить
картинку над Picture1, то она просто появиться так, где и
была до Drag-а
End Sub
Private Sub Image1_DragOver(Source As Control, X As Single,
Y As Single, State As Integer)
Select Case State
Case vbEnter
Image1.DragIcon = yes.Picture
Case vbLeave
Image1.DragIcon = no.Picture
End Select
End Sub
Private Sub Picture1_DragOver(Source As Control, X As Single, Y As Single, State
As Integer)
Select Case State
Case vbEnter
Image1.DragIcon = yes.Picture
Case vbLeave
Image1.DragIcon = no.Picture
End Select
End Sub
Объясняю: vbEnter - означает, что объект находится над
приемником, а vbLeave, что ушел с приемника. В событии
Picture1, я вовсе не ошибся, там написано то же самое,
что и в Image1, т.к. приемником является форма.