Учебник по Visual Basic - 5.5. Программируемое перетаскивание с использованием OLE

E-mail Печать PDF
Рейтинг пользователей: / 449
ХудшийЛучший 
Индекс материала
Учебник по Visual Basic
1.2. Преймущества и недостатки VB
1.3. Запуск VB.
1.4. Интегрированная среда разработки (IDE - Integrated Development Environment)
1.5. Основные конструкции языка.
2. Типы данных. Переменные и процедуры, их области видимости. Массивы.
2.2. Переменные и процедуры, их области видимости.
2.3. Объявление массивов и работа с ними.
3. Создание меню
3.1. Создание статического меню
3.2. Создание контекстно-зависимого меню
5. Реализация технологии Drag&Drop средствами VB
5.1. Объекты Drag&Drop
5.2. События Drag&Drop
5.3. Автоматическое перетаскивание
5.4. Перетаскивание с использованием OLE
5.5. Автоматическое перетаскивание с использованием OLE
5.5. Программируемое перетаскивание с использованием OLE
6. Работа с классами в Visual Basic.
6.1.1. Добавление в класс свойств.
6.1.2. Добавление в класс методов.
6.1.3.Добавление в класс событий.
6.1.4.Объявление и использование объектов.
6.1.5. Удаление объекта класса.
6.2. Самостоятельная работа - доработка класса Splitter.
7. Технология OLE
7.1. Элемент управления OLE Container
7.2. Объекты OLE как элементы управления
7.3. OLE Automation
7.4. Создание объекта OLE
7.5. Использование объекта OLE
7.6. Работа с объектами Word
8. Создание элементов управления Active X.
Создание элементов управления ActiveX
Создание элементов управления Active X на примере ZigZag.
9. Использование функций Windows API в VB.
API-вызовы
10. Файловые функции в Visual Basic.
10.2. Обработка текстовых документов (файлы последовательного доступа).
10.3. Файлы произвольного (прямого) доступа.
10.4. Файлы инициализации.
10.5. Использование FSO (File System Object).
11. Использование элемента управления WinSock Control для создания сетевых приложений.
12. Доступ к базам данных из VB с помощью ADO.
12.2. Объект управления данными - ADO Data Control.
12.3. Связанные с данными элементы управления.
12.4. Использование Data Grid Control.
12.5. Доступ к базам данных через объекты ADODB.
13. Практика
Все страницы

5. Программируемое перетаскивание с использованием OLE

 

Если обычный процесс OLE-перетаскивания необходимо каким-либо образом подкорректировать, то дополнительные действия следует запрограммировать. Это также необходимо в том случае, если вы работаете с элементами управления, которые не поддерживают автоматическое OLE-перетаскивание (CommandButton, Label, Checkbox, OptionButton, Frame, DriveListBox).

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

Свойства:

OLEDragMode Активизирует элемент управления в качестве объекта-источника.

OLEDropMode Активизирует элемент управления в качестве объекта-приемника.

Методы:

OLEDrag Начинает процесс перетаскивания.

События:

OLEDragDrop Происходит при перетаскивании объекта-источника

OLEDragOver Происходит, когда один компонент перемещают над другим.

OLEGiveFeedback Происходит после каждого события OLEDragOver и обеспечивает визуальную обратную связь (например, изменение курсора мыши).

OLEStartDrag Происходит при выполнении метода OLEDrag или при инициализации автоматического OLE-перетаскивания.

OLECompleteDrag Происходит после перемещения объекта-источника в объект-приемник для информирования источника о выполнении или отмене

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

 

Объект-источник

Как и при обычном перетаскивании, процесс OLE-перетаскивания начинается вызовом метода OLEDrag:

Private Sub Textl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then

Textl.OLEDrag

End If

End Sub

Метод OLEDrag не имеет аргументов и не формирует соответствующий пакет данных, а только начинает процесс перетаскивания.

 

 

Объект-приемник

На принимающей стороне свойство OLEDropMode должно иметь значение vbOLEDropManual. Когда данные оставляются, для приемника происходит событие OLEDragDrop. Кроме того, необходимо написать обработчик события OLEDragOver, в котором следует проверить тип перетаскиваемой информации и указать действия (например, для файлов это может быть копирование или перемещение).

Проверить тип перетаскиваемой информации можно с помощью метода GetFormat объекта Data, который является параметром события OLEDragOver.

 

Пример проверки:

If Data.GetFormat (vbCFFiles) Then ...

Т.е. проверка осуществляется подстановкой соответствующей константы в метод GetFormat и сравнении результата с True. Можно использовать следующие типы констант:

vbCFText - один или несколько текстовых (*.txt) файлов.

vbCFBitmap - один или несколько bmp-файлов.

vbCFMetafile - один или несколько wmf-файлов.

vbCFFiles - один или несколько файлов (любых).

vbCFRTF - один или несколько RTF-файлов.

 

После проверки необходимо выставить действие с помощью изменения параметра события OLEDragOver Effect.

Возможные константы:

vbDragEffectNone - ничего не происходит (используется для отмены каких-либо действий при ненужном формате перетаскиваемых файлов).

vbDragEffectCopy - копирует объекты из источника в приемник.

vbDragEffectMove - перемещает объекты из источника в приемник.

В зависимости от значения параметра Effect будут отображаться различные курсоры мыши.

Далее необходимо написать обработчик события OLEDragDrop для завершения перетаскивания - т.е. в этом обработчике находится код, ответственный собственно за перемещение.

Для обработки каждого файла из перетаскиваемых необходимо пройтись  с помощью цикла For Each по коллекции Files объекта Data (Data - параметр события OLEDragDrop).

Пример (просто заносит в список имена каждого из файлов):

For Each fff In Data.Files

     lstList1.AddItem fff

Next fff

Таким образом, в обработчике этого события вы указываете, что конкретно делает ваше приложение с поступившими файлами.

 

Пример программируемого ОLE-перетаскивания: На форме расположен textBox. При перемещении нескольких файлов из Проводника, файлы открываются в TextBoxe

 

'1.Добавьте на форму TextBox. Установите его свойство OLEDropMode в "Manual", свойство "MultiLine" в "True".

'

'2.Добавьте функуцию выбора файлов

Sub DropFile(ByVal txt As TextBox, ByVal strFN$)

Dim iFile As Integer

iFile = FreeFile

Open strFN For Input Access Read Lock Read _

Write As #iFile

Dim Str$, strLine$

While Not EOF(iFile) And Len(Str) <= 32000

Line Input #iFile, strLine$

If Str <> "" Then Str = Str & vbCrLf

Str = Str & strLine

Wend

Close #iFile

txt.SelStart = Len(txt)

txt.SelLength = 0

txt.SelText = Str

End Sub

 

'3.Добавьте функуцию в событие OLEDragOver.

Private Sub Text1_OLEDragOver(Data As _

DataObject, Effect As Long, Button As Integer, _

Shift As Integer, X As Single, Y As Single, State _

As Integer)

If Data.GetFormat(vbCFFiles) Then

Effect = vbDropEffectCopy And Effect

Exit Sub

End If

Effect = vbDropEffectNone

End Sub

 

'4.Добавьте функуцию в событие OLEDragDrop.

Private Sub Text1_OLEDragDrop(Data As _

DataObject, Effect As Long, Button As Integer, _

Shift As Integer, X As Single, Y As Single)

If Data.GetFormat(vbCFFiles) Then

Dim vFN

For Each vFN In Data.Files

DropFile Text1, vFN

Next vFN

End If

End Sub

 

'Теперь загрузите приложение, откройте Проводник, выберите несколько текстовых файлов и "перетащите" их в TextBox. Каждый из файлов будет открыт в текстовом поле.