Событие OLEStartDrag()

Событие происходит при выполнении перетаскивания OLE для источника с выбранным ручным режимом перетаскивания (свойство OLEDragMode - vbOLEDrag Manual). Кроме того, оно происходит в тех случаях, когда компонент-источник иницииру-етоперацию перетаскивания OLE c автоматическим режимом перетаскивания (свойство OLEDragMode = vbOLEDragAutomatic).

Параметр данные определяет объект DataObject с перемещаемыми или копируемы-миданными OLE или форматы данных, которые будут предоставлены источни-ком позднее.

Параметр возможные-действия определяет операции перетаскивания, разрешенные для источника данной операции. Он может принимать одно из следующих значений: vbDropEffectNone, vbDropEffectCopy или vbDropEffectMove.

 

Событие OLEDragOver()

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

 

Private Sub объект_OLEDragOver(данные As DataObject, действие As Long, _

кнопки As Integer, клавиши As Integer,

x As Single, у As Single, состояние As Integer)

 

Первые шесть параметров эквивалентны параметрам события OLEDragDrop, рассмотренным выше. Дополнительный параметр состояние определяет состояние перетаскиваемого объекта по отношению к приемнику события и принимает те же значения, что и для рассмотренного ранее события DragOver.

 

Событие OLESetData()

Событие OLESetData происходит в тот момент, когда компонент-приемник вызывает метод GetData для объекта DataObject источника. Процедура события имеет следующий синтаксис:

 

Private Sub oбъект_OLESetData(данные As DataObject,

формат-данных As Integer)

 

Процедура события имеет два параметра. Параметр данные определяет объект DataObject, содержащий необходимые данные. Параметр формат-данных описывает формат данных, которые хранятся в параметре данные.

 

Событие OLEGiveFeedback()

Событие OLEGiveFeedback происходит после каждого события OLEDragOver. Оно предназначено в первую очередь для создания визуальных признаков, которые показывают, какие действия разрешены для перетаскиваемых данных. Например, в процедуру этого события можно вставить код для изменения перетаскиваемого значка или обновления панели строки состояния.

 

Приложение с поддержкой перетаскивания OLE

Рассмотрим процесс перетаскивания OLE на следующем примере:

1. Создайте новый проект командой File > New Project. Выберите в диалоговом окне New Project значок Standard EXE и нажмите кнопку ОК.

2. Задайте свойству Name формы Form1 значение frmMain, а свойству Caption -значение Перетаскивание OLE.

3. Поместите на форму два текстовых поля. Разместите их рядом друг с другом так, чтобы их высота примерно совпадала с высотой формы.

4. Задайте свойству Name левого текстового поля значение txt1 и очистите его свойство Text. Задайте свойству OLEDragMode значение 1 - Automatic, a свойству MultiLine - значение True. Задайте свойству ScrollBars значение 2 - Vertical.

5. Задайте свойству Name правого текстового поля значение txt2 и очистите его свойство Text. Задайте свойству OLEDragMode значение 1 - Automatic, a свойству MultiLine - значение True. Задайте свойству ScrollBars значение 2 - Vertical.

6. Вставьте следующий фрагмент в процедуру события OLEDragDrop поля txt1:

 

Private Sub txt1_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

txt1,Text = Data.GetData(vbCFText)

End Sub

 

7. Вставьте следующий фрагмент в процедуру события OLEStartDrag поля txt1:

 

Private Sub txt1_OLEStartDrag(Data As DataObject, _

AllowedEffects As Long)

Data,SetData txt1.Text, vbCFText

End Sub

 

8. Перейдем к текстовому полю txt2 и наделим его поддержкой перетаскивания. Сначала вставьте следующий фрагмент в процедуру события OLEDragDrop поля txt2:

 

Private Sub txt1_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

 

txt2.Text = Data.GetData(vbCFText)

End Sub

 

9. Вставьте следующий фрагмент в процедуру события OLEStartDrag поля txt2:

 

Private Sub txt2_OLEStartDrag(Data As DataObject, _

AllowedEffects As Long)

Data.SetData txt2.Text, vbCFText

End Sub

 

10. Сохраните и запустите проект.

Введите какой-нибудь текст в левом текстовом поле. Вы можете скопировать или переместить его в правое поле путем перетаскивания. Но чтобы увидеть действительно эффектный номер, запустите WordPad или Microsoft Word и попробуйте перетащить данные из txt1 в окно другого приложения (не перепутайте WordPad с Блокнотом (Notepad) — Блокнот не поддерживает операций перетаскивания OLE). Затем попробуйте перетащить данные из WordPad в ваше приложение. Результат показан на рис. 11.3.

 

Рис. 11.3. Перетаскивание данных между приложениями

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: