Опубликован: 04.07.2006 | Уровень: для всех | Доступ: свободно
Лекция 6:

Обмен данными

Перетаскивание данных (тексты, рисунки, таблицы, деревья файлов и т.д.) с использованием OLE

Имеется возможность перетаскивать наборы данных (тексты, рисунки, таблицы, деревья файлов и т.д.) с применением OLE. При этом различают перемещение данных (после перемещения данные в источнике удаляют) и копирование данных. Для обеспечения перетаскивания действия (начало перетаскивания, сбрасывание) должны быть запрограммированы. Рассматриваются два объекта: источник - OLEDrag и приeмник - OLEDrop. В случае автоматического перетаскивания свойствам OLEDragMode, OLEDropMode элементов управления, например,

OLE

Рис. 6.6. OLE

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. Перетаскивание данных

Последовательность действий:

  1. присвоить свойству Picture обоих элементов управления Image значения - 2 любых имени файла с расширением .bmp, см. рис. 6.7
  2. ввести код, данный ниже, стартовать проект,
  3. перетащить мышью рисунок из первого элемента управления Image в приложение Word или WordPad (предварительно стартовать Word/WordPad),
  4. при нажатой клавише 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
Перетаскивание данных

Рис. 6.7. Перетаскивание данных
Константин Новков
Константин Новков
Как подключить библиотеку DLL ?
антонина квасова
антонина квасова
Что реализует инструкция Open - Open "a:\t.txt" For Output As #1
Светлана Ведяева
Светлана Ведяева
Россия, Саратов
Оксана Пагина
Оксана Пагина
Россия, Москва