Офисное программирование | страница 52
• fmDropEffectNone = 0 – не копировать и не передвигать опущенный исходный элемент на место назначения;
• fmDropEffectCopy =1 – копировать опущенный исходный элемент на место назначения;
• fmDropEffectMove = 2 – передвинуть опущенный исходный элемент на место назначения;
• fmDropEffectCopyOrMove = 3 – скопировать или передвинуть опущенный исходный элемент на место назначения.
Параметр Effect задает цель операции и имеет по умолчанию значение 1 (fmDropEffectCopy). Обычно он опускается, поскольку значение по умолчанию задает наиболее вероятную цель операции. Значение, возвращаемое методом StartDrag, определяет результат выполнения операции. Его можно использовать для анализа того, что же произошло в результате перетаскивания на самом деле. Между запуском метода StartDrag в правой части оператора присваивания и присваиванием результата левой части переменной ResultEffect в процессе перемещения объекта происходит много событий. Работают обработчики этих событий, и результат говорит о том, как закончился этот процесс.
Технология выполнения
1. Активизируйте приложение Word и сохраните документ.
2. Перейдите в редактор VBA и создайте форму (рис. 59).
3. Создайте обработчик события Initialize для диалогового окна, обеспечивающего инициализацию начального состояния:
Private Sub UserForm_Initialize()
With Me.ListBox1
AddItem «январь»
AddItem «февраль»
AddItem «март»
AddItem «апрель»
AddItem «май»
AddItem «июнь»
AddItem «июль»
AddItem «август»
AddItem «сентябрь»
AddItem «октябрь»
AddItem «ноябрь»
AddItem «декабрь»
End With
End Sub
4. В результате инициализируется список «Месяц года», имеющий имя ListBox1. Готовясь перетащить этот элемент в другое место, пользователь выбирает элемент этого списка. Затем он нажимает левую клавишу мыши, и у списка возникает событие MouseMove, обработчик которого имеет много параметров. Приведем текст этого обработчика:
Private Sub ListBox1_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 ListBox1.Value
Effect = MyDataObject.StartDrag(fmDropEffectCopy)
If Effect = 0 Then MsgBox (Msg)
Debug.Print "Effect = ", Effect
End If
End Sub
5. Откомпилируйте программу и запустите форму на выполнение.
Дополнительные элементы управления