Основы офисного программирования и язык VBA


Перемещение объектов. Как реализовать технику DragAndDrop - часть 3


Private Sub UserForm_Initialize () With Me. DraggedList . AddItem "Красный" . AddItem "Оранжевый" . AddItem "Желтый" . AddItem "Зеленый" . AddItem "Голубой" . AddItem "Синий" . AddItem "Фиолетовый" . AddItem "Черный" . AddItem "Белый"

End With End Sub

Здесь инициализируется список "Цвета", имеющий имя DraggedList. Когда пользователь, выбирая элемент этого списка, нажимает левую клавишу мыши, готовясь перетащить этот элемент в другое место, у списка возникает событие MouseMove, обработчик которого имеет много параметров. Описание этого события, всех его параметров, описание других используемых нами событий, будут даны в последующих параграфах, а сейчас приведем текст этого обработчика:

Private Sub DraggedList_MouseMove (ByVal Button As Integer, ByVal Shift As Integer, _ ByVal X As Single, ByVal Y As Single) Dim MyDataObject As DataObject Dim Msg As String Msg = "Видимо, Вы уронили цвет при перетаскивании. Повторите операцию!" If Button = 1 Then Debug. Print "MouseMove" Set MyDataObject = New DataObject Dim Effect As Integer MyDataObject. SetText DraggedList. Value Effect = MyDataObject. StartDrag (fmDropEffectCopy) If Effect = 0 Then MsgBox (Msg) Debug. Print "Effect = ", Effect End If

End Sub

О параметрах, как уже говорилось речь пойдет впереди, а сейчас прокомментируем его работу. Если в момент возникновения события нажата левая кнопка мыши, то создается новый объект DataObject, его метод SetText копирует значение выбранного элемента списка, а метод StartDrug запускает процесс перетаскивания. Заметьте, что метод StartDrug можно было бы вызывать без параметра, ѕ на результат это не повлияло бы. Результат перетаскивания анализируется и, если он закончился неуспехом (Effect = 0), то выдается уведомляющее сообщение. Исполняемые операторы окаймлены отладочной печатью, что позволит нам продемонстрировать, что между первой печатью, уведомляющей о начале работы обработчика MouseMove, и последней печатью, уведомляющей о результате работы, будут напечатаны сообщения других обработчиков, к рассмотрению которых мы и переходим.




Начало  Назад  Вперед