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

1.3. Метод Drag – ручное перетаскивание

Этот метод начинает, завершает или отменяет операцию перетаскивания любого из элементов управления кроме Line, Menu, Shape, Timer и CommonDialog. Он позволит нам не блокировать объект для редактирования, использовать всевозможные иконки, чтоб пользователь видел, что делает при перетаскивании.

Еще раз напомним очень важную вещь: результат перетаскивания над перемещаемым объектом (копирование, удаление, вставка и т.д.) определяется в объекте-приемнике в процедуре обработки события DragDrop.

Итак, для того, чтобы начать что-нибудь перетаскивать, надо перейти в режим перетаскивания. Для этого обычно используется процедура события MouseDown для объекта-источника. В ней мы включаем метод Drag. Для включения-выключения метода и отмены перетаскивания используются следующие встроенные константы:

vbCancel =0 'отменяет операцию перетаскивания

vbBeginDrag =1 'включает метод Drop

vbEndDrag =2 'выключает метод Drop

Пример.

1. Создайте новый проект и расположите на форме три текстовых поля Text1, Text2 и Text3 и кнопку Command1. Смысл проекта в том, чтобы перетаскивать содержимое Text1 в Text3, а Text2 запрещен для перетаскивания. Также организуем перетаскивание по форме командной кнопки Command1.

2. Объявим переменную Flag как булеву (логическую), чтобы позволить пользователю беспрепятственно редактировать текст в объекте-источнике, т.е в Text1. Т.е. изначально Flag=False и при первом щелчке метод Drag в процедуре Text1_MouseDown не включается. Пользователь спокойно может редактировать текст. Но в конце процедуры Flag меняет свое значение на противоположное (Flag = Not Flag) и при повторном нажатии кнопки мыши уже включается метод Drag. В процедуре загрузки формы зададим какое-нибудь содержимое текстовым полям.

Option Explicit

Dim Flag As Boolean

'координаты мыши в момент ее нажатия по командной кнопке

Dim downX As Single, downY As Single

Private Sub Form_Load()

Text1.Text = "Доброе утро"

Text2.Text = "Спокойной ночи"

Text3.Text = "Здравствуйте"

Flag = False

End Sub

3. Далее в событии MouseDown для объекта-источника Text1 включим метод Drag для левой кнопки мыши. И меняем состояние переменной Flag:

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

X As Single, Y As Single)

'проверяем, если нажата левая кнопка мыши и это повторное нажатие, то

If Button = 1 And Flag = True Then

'включаем метод Drag

Text1.Drag vbBeginDrag

'загружаем иконку для курсора

Text1.DragIcon = LoadPicture(App.Path & "\Drop1pg.ico")

End If

'меняем значение флага на противоположное

Flag = Not Flag

End Sub

4. В объекте-приемнике по событию DragDrop производим результат перетаскивания, т.е. присваиваем значение Text3=Text1. При этом проверяем тип объекта-источника:

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

'проверяем, соответствует ли тип объекта-источника TextBox'у

If TypeOf Source Is TextBox Then

'если да, то

Text3.Text = Source.Text

'и передадим фокус в объект-приемник (Text3)

Text3.SetFocus

End If

End Sub

5. Поскольку наглядность перетаскивания для пользователя чрезвычайно важна, загрузим иконки в соответствии с положением мыши для объекта-источника (Text1):

Private Sub Text1_DragOver(Source As Control, X As Single, Y As Single, _

State As Integer)

'если мышь над объектом-источником грузим обычную иконку

If State = vbEnter Then

Text1.DragIcon = LoadPicture(App.Path & "\Drop1pg.ico")

'если покидает объект, то грузим другую иконку

ElseIf State = vbLeave Then

Text1.DragIcon = LoadPicture(App.Path & "\Drag3pg.ico")

End If

End Sub

и для объекта-приемника (Text3):

Private Sub Text3_DragOver(Source As Control, X As Single, Y As Single, _

State As Integer)

'если мышь над объектом-приемником, то

If State = vbEnter Then

Text1.DragIcon = LoadPicture(App.Path & "\Drag1pg.ico")

'если вне объекта-приемника, то

ElseIf State = vbLeave Then

Text1.DragIcon = LoadPicture(App.Path & "\Drag3pg.ico")

End If

End Sub

6. На этой же форме включим метод Drag для командной кнопки Command1.

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

X As Single, Y As Single)

If Button = 1 Then

Command1.Drag vbBeginDrag

'запоминаем координаты мыши над командной кнопкой

downX = X

downY = Y

End If

End Sub

и напишем процедуру ее перетаскивания по форме

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

If TypeOf Source Is CommandButton Then

Source.Move X - downX, Y - downY

End If

End Sub

Если бы мы не проверяли тип объекта с помощью ключевого слова TypeOf, то при попытке перетащить кнопку в Text3 получили бы ошибку и фатальное завершение программы. А при наличии проверки наши методы не мешают друг другу и все проходит успешно.

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

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