Телефон: +7 (495) 649-0526

Drag and Drop в VBA

Картинка к странице

Следующая статья:

Содержание

Перемещение объектов. Реализация технологии DragAndDrop

DragAndDrop (Переместить и Опустить). Некоторый объект захватывается мышью, перетаскивается к другому целевому объекту и отпускается, изменяя при этом свойства целевого объекта. Типичным примером является возможность перетаскивать элемент из одного списка в другой. Другой пример – перетаскивание писем и опускание их в почтовый ящик. Важным элементом этой техники является изменение внешнего вида курсора. Захват объекта происходит при подведении курсора к объекту и нажатии левой кнопки мыши. В этот момент курсор меняет внешнюю форму. Когда происходит перемещение мыши, то в тех областях, где расположен целевой объект, курсор снова меняет форму, показывая, что цель достигнута. Если в этот момент отпустить левую кнопку мыши, то операция перемещения заканчивается успешно. Если отпустить кнопку мыши в других областях, то это приведет к неудаче. Объект DataObject и его метод StartDrag являются частью этой технологии.

Пример

Создать форму, имеющую два элемента управления: список и текстовое поле. При помощи мыши из списка перетаскивают в текстовое поле необходимый элемент, выделенный в списке.

Программно заполняются элементы списка, который содержит наименования месяцев года. Программа, используя технологию DragAndDrop объекта DataObject, позволяет перетащить выбранный элемент из списка в текстовое поле выбора. При неправильном действии, то есть перетаскивании не в текстовое поле, происходит вызов предупреждающего сообщения.

Форма примера в режиме конструктора

Форма примера в режиме конструктора

Форма примера в рабочем режиме

Форма примера в рабочем режиме

Окно предупреждения о неправильно выполненной операции

Окно предупреждения о неправильно выполненной операции

Когда пользователь захватывает выбранный им элемент списка, то возникает некоторое событие. В нашем примере это событие MouseMove, обработчик которого и будет вызывать метод StartDrag объекта DataObject, который хранит значение перетаскиваемого элемента. Синтаксис метода:

Function StartDrag([Effect As fmDropEffect]) As

fmDropEffect

Эта функция обычно вызывается в операторе присваивания вида:

ResultEffect=объект. StartDrag([effect as fmDropEffect])

Необязательный параметр Effect и результат выполнения функции принадлежат перечислению fmDropEffect. Константы, входящие в это перечисление, имеют следующие значения:

  • fmDropEffectNone=0 – не копировать и не передвигать опущенный исходный элемент на место назначения;
  • fmDropEffectCopy =1 – копировать опущенный исходный элемент на место назначения;
  • fmDropEffectMove=2 – передвинуть опущенный исходный элемент на место назначения;
  • fmDropEffectCopyOrMove=3 – скопировать или передвинуть опущенный исходный элемент на место назначения.

Параметр Effect задает цель операции и имеет по умолчанию значение 1 (fmDropEffectCopy). Обычно он опускается, поскольку значение по умолчанию задает наиболее вероятную цель операции. Значение, возвращаемое методом StartDrag, определяет результат выполнения операции. Его можно использовать для анализа того, что же произошло в результате перетаскивания на самом деле. Между запуском метода StartDrag в правой части оператора присваивания и присваиванием результата левой части переменной ResultEffect в процессе перемещения объекта происходит много событий. Работают обработчики этих событий, и результат говорит о том, как закончился этот процесс.

Технология выполнения

  • Активизируйте приложение Word и сохраните документ.
  • Перейдите в редактор VBA и создайте форму.
  • Создайте обработчик события Initialize для диалогового окна, обеспечивающего инициализацию начального состояния:

Private Sub UserForm_Initialize()

With Me.ListBox1

AddItem «январь»

AddItem «февраль»

AddItem «март»

AddItem «апрель»

AddItem «май»

AddItem «июнь»

AddItem «июль»

AddItem «август»

AddItem «сентябрь»

AddItem «октябрь»

AddItem «ноябрь»

AddItem «декабрь»

End With

End Sub

  • В результате инициализируется список «Месяц года», имеющий имя 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

  • Откомпилируйте программу и запустите форму на выполнение.
  • Видео: «Станция Спортивная - Грузчик»

    Команда КВН представляет музыкальную композицию «Грузчик».

    Станция Спортивная - Грузчик
Интересное в интернете: Ик обогреватели для сауны. Ик обогреватель Frico.

Статья: Drag and Drop в VBA

Раздел: VBA программирование (office)

Сайт: SD Company » Все разделы статей

Последнее изменение: 2010.11.18 в 08:47

Теги: drag, drop, vba

Следующая статья:

DataObject и VBA
DataObject и VBA
Описание одного из основных объектов dataobject в VBA, который не видно, который но участвует во многих в операциях
Объекты Range и Selection в VBA
Объекты Range и Selection в VBA
Описание, как работать с текстовой информацией класса document при помощи методов Range и Selection
Циклы в VBA
Циклы в VBA
Описание основных принципов, как работать с циклами в Visual Basic Application (VBA) и их возможности