Основы офисного программирования и язык VBA

         

Объект DataObject


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

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

Текст заносится в DataObject методом SetText, а извлекается оттуда методом GetText:

объект. SetText (StoreData [, format])

и

Строка = объект. GetText ([format]),

где объект - объект-владелец метода, StoreData - текст, который надо запомнить в объекте, format - это необязательный параметр, задающий "формат" данных (1 соответствует стандартному текстовому формату, а другие числа и строки соответствуют пользовательским форматам). Если параметр format в вызове SetText явно не указан, то запоминаемому тексту присваивается формат стандартного текста 1. Так как для каждого формата DataObject содержит лишь один текст с этим форматом, то фактически формат играет роль ключа, по которому текст заносится и извлекается из DataObject. Метод GetFormat позволяет узнать, имеется ли в объекте DataObject текст определенного формата:

BooleanVar = объект. GetFormat (format)

Переменная BooleanVar получит значение True, если данные с указанным форматом входят в объект. Объект DataObject может обмениваться данными с буфером обмена посредством методов GetFromClipboard и PutInClipboard. Оператор:

String = объект. GetFromClipboard ()

помещает содержимое буфера обмена в DataObject, а вызов:

объект. PutInClipboard

переносит данные из DataObject, имеющие текстовый формат 1, в буфер обмена.


Допустим, в диалоговом окне имеются два поля ввода TextIn и TextOut, командная кнопка CmbCopy и метка Lable1. Занесем при инициализации окна в поле TextIn текстовую информацию и инициализируем глобальные переменные:

Public NewData As DataObject Public NumClick As Integer

Private Sub UserForm_Initialize () Set NewData = New DataObject 'инициализация объекта NumClick = 0 'число щелчков TextIn. Text = "Пример переноса данных с помощью DataObject "

End Sub

При последовательных щелчках командной кнопки занесем содержимое поля TextIn в объект DataObject методом SetText, из него перенесем в буфер обмена с помощью PutInClipboard, а уже из него поместим в поле TextOut методом Paste. О выполнении очередной операции будет сообщать метка Label1.

Private Sub CmdCopy_Click () Select Case NumClick Case 0 NewData. SetText TextIn. Text Label1. Caption = "Из TextIn в DataObject" Case 1 NewData. PutInClipboard Label1. Caption = "Из DataObject в буфер обмена" Case 2 TextOut. Paste Label1. Caption = "Из буфера обмена в TextOut" End Select

NumClick = NumClick + 1 If NumClick = 3 Then NumClick = 0

End Sub

Разумеется, перенос информации из одного поля в другое можно было осуществить и через буфер обмена, минуя DataObject. Для копирования данных из поля ввода в буфер обмена можно вызвать метод Copy. Более важный метод этого объекта, инициирующий операцию перетаскивания, - StartDrag рассмотрим подробнее.


Содержание раздела