Как подключить библиотеку DLL ? |
Обмен данными
Перетаскивание данных (тексты, рисунки, таблицы, деревья файлов и т.д.) с использованием OLE
Имеется возможность перетаскивать наборы данных (тексты, рисунки, таблицы, деревья файлов и т.д.) с применением OLE. При этом различают перемещение данных (после перемещения данные в источнике удаляют) и копирование данных. Для обеспечения перетаскивания действия (начало перетаскивания, сбрасывание) должны быть запрограммированы. Рассматриваются два объекта: источник - OLEDrag и приeмник - OLEDrop. В случае автоматического перетаскивания свойствам OLEDragMode, OLEDropMode элементов управления, например,
TextBox, Image должно быть присвоено значение vbOLEDragAutomatic (в окне свойств), альтернативно (ручное перетаскивание) - vbManual. Установки свойств OLEDragMode/OLEDropMode могут быть сделаны и программным путeм.
Ниже рассматриваются параметры объекта DataObject, содержащего перетаскиваемые данные. Он фигурирует в процедурах обработки событий, в которые передаeтся параметр Data (см. код). Объект (аналогичен объекту Clipboard) имеет 4 метода:
- SetData устанавливает данные в требуемом формате (vbCFText - текст, vbCFRTF расширенный текстовый формат, vbCFBitmap - растровое изображение vbCFFiles - список файлов и .т.д.),
- GetFormat проверяет наличие данных в требуемом формате (сможет ли приeмник использовать данные),
- Clear удаляет содержимое объекта,
- GetData копирует данные в требуемом формате из DataObject в приeмник.
Ниже приводится перечень параметров элементов управления, обеспечивающих перетаскивание, затем даeтся практическая работа 42 для усвоения материала:
Метод: OLEDrag - начать перетаскивание,
Свойства: OLEDragMode/OLEDropMode - установить элемент управления в качестве источника/приeмника, OLEDropAllowed - установить разрешение сбрасывания OLE в контейнере.
События: OLEDragDrop происходит при сбрасывании-OLE в контейнер OLE, синтаксис:
Private Sub Object_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Singlе, y As Single). Здесь:
- DataObject - см. выше,
- Effect (действие) определяет предпринимаемые после завершения перетаскивания действия, см., например, процедуру: Private Sub Image1_OLEDragDrop(:),
- Button определяет (нажатую при перетаскивании) кнопку мыши,
- Shift определяет использование при перетаскивании клавиш Shift, Ctrl, Alt,
- x, y - координаты курсора мыши.
OLEDragOver происходит при перемещении одного объекта над другим, OLEGiveFeedback происходит после события OLEDragOver ; может быть использовано для создания визуальных признаков действий, OLEStartDrag происходит или для источников с ручным режимом перетаскивания или при инициализации автоматического перетаскивания, OLESetData происходит для источника после применения приeмником метода GetData, OLECompleteDrag происходит после перемещения объекта из источника в приeмник.
Практическая работа 42. Перетаскивание данных
Последовательность действий:
- присвоить свойству Picture обоих элементов управления Image значения - 2 любых имени файла с расширением .bmp, см. рис. 6.7
- ввести код, данный ниже, стартовать проект,
- перетащить мышью рисунок из первого элемента управления Image в приложение Word или WordPad (предварительно стартовать Word/WordPad),
- при нажатой клавише CTRL скопировать перетаскиванием рисунок из второго элемента управления Image в Word. Затем из Word переместить объекты назад в поля элементов управления Image. Пояснения даны под комментариями в коде.
' установить требуемый формат данных Private Sub Image1_OLEStartDrag(Data As DataObject, AllowedEffects As Long) Data.SetData Image1.Picture, vbCFBitmap End Sub ' копировать/переместить в требуемом формате Private Sub Image1_OLEDragDrop(Data As DataObject, Effect As _ Long, Button As Integer, Shift As Integer, X As Single, Y As Single) If Shift > 0 Then Effect = vbDropEffectCopy Else Effect = vbDropEffectMove End If Image1.Picture = Data.GetData(vbCFBitmap) End Sub Private Sub Image2_OLEStartDrag(Data As DataObject, AllowedEffects As Long) Data.SetData Image2.Picture, vbCFBitmap End Sub Private Sub Image2_OLEDragDrop(Data As DataObject, Effect As _ Long, Button As Integer, Shift As Integer, X As Single, Y As Single) If Shift > 0 Then Effect = vbDropEffectCopy Else Effect = vbDropEffectMove End If Image2.Picture = Data.GetData(vbCFBitmap) End Sub