Чтение онлайн

на главную - закладки

Жанры

Офисное программирование
Шрифт:

4. Откомпилируйте программу и запустите форму на выполнение.

4.4. Объект DataObject [3]

Описание объекта DataObject

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

3

Теоретический

материал опирается на материал книги Биллиг В.А. VBA в Office 2000. Офисное программирование. М.: Издательско-торговый дом «Русская Редакция», 1999.

Поведение 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, в буфер обмена.

Пример 28. Форма содержит два текстовых поля, в одном из них программно отображается текст, который при помощи методов объекта dataobject необходимо перенести (перекопировать) во второе текстовое поле. Данное действие происходит после нажатия на кнопку «Копировать», причем все производимые действия программы отображаются в соответствующей метке на форме (рис. 58).

Рис. 58. Форма примера 28 в режиме конструктора и в рабочем режиме

Технология выполнения

1. Активизируйте приложение Word и сохраните документ.

2. Перейдите в редактор VBA и создайте форму (рис. 58).

3. Пропишите при инициализации окна в поле TextBox1 текстовую информацию и проинициализируйте глобальные переменные:

Public NewData As DataObject

Public NumClick As Integer

Private Sub UserForm_Initialize

Set NewData = New DataObject 'инициализация объекта

NumClick = 0

'число щелчков

TextBox1.Text = "Пример переноса данных с помощью

DataObject»

End Sub

4. При

последовательных щелчках по командной кнопке будут происходить последовательно действия, описанные в программе:

Private Sub CommandButton1_Click

Select Case NumClick

Case 0

NewData.SetText TextBox1.Text

Label1.Caption = «Из первого поля в DataObject»

Case 1

NewData.PutInClipboard

Label1.Caption = «Из DataObject в буфер обмена»

Case 2

TextBox2.Paste

Label1.Caption = «Из буфера обмена во второе поле»

End Select

NumClick = NumClick + 1

If NumClick = 3 Then NumClick = 0

End Sub

5. Откомпилируйте программу и запустите форму на выполнение.

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

Перемещение объектов. Реализация технологии DragAndDrop

Для копирования данных из поля ввода в буфер обмена обычно вызывают метод Сору. Однако при организации интерфейса в диалоговых формах полезно предоставить пользователю возможность работы с техникой DragAndDrop (Переместить и Опустить). Некоторый объект захватывается мышью, перетаскивается к другому целевому объекту и отпускается, изменяя при этом свойства целевого объекта. Типичным примером является возможность перетаскивать элемент из одного списка в другой. Другой пример – перетаскивание писем и опускание их в почтовый ящик. Важным элементом этой техники является изменение внешнего вида курсора. Захват объекта происходит при подведении курсора к объекту и нажатии левой кнопки мыши. В этот момент курсор меняет внешнюю форму. Когда происходит перемещение мыши, то в тех областях, где расположен целевой объект, курсор снова меняет форму, показывая, что цель достигнута. Если в этот момент отпустить левую кнопку мыши, то операция перемещения заканчивается успешно. Если отпустить кнопку мыши в других областях, то это приведет к неудаче. Объект DataObject и его метод StartDrag являются частью этой технологии.

Пример 29. Создать форму, имеющую два элемента управления: список и текстовое поле. При помощи мыши из списка перетаскивают в текстовое поле необходимый элемент, выделенный в списке (рис. 59, 60, 61).

Программно заполняются элементы списка, который содержит наименования месяцев года. Программа, используя технологию DragAndDrop объекта DataObject, позволяет перетащить выбранный элемент из списка в текстовое поле выбора (рис. 60). При неправильном действии, т. е. перетаскивании не в текстовое поле, происходит вызов предупреждающего сообщения (рис. 61).

Рис. 59. Форма примера 29 в режиме конструктора

Рис. 60. Форма примера 29 в рабочем режиме

Рис. 61. Окно предупреждения о неправильно выполненной операции

Когда пользователь захватывает выбранный им элемент списка, то возникает некоторое событие. В нашем примере это событие MouseMove, обработчик которого и будет вызывать метод StartDrag объекта DataObject, который хранит значение перетаскиваемого элемента. Синтаксис метода:

Поделиться:
Популярные книги

Инцел на службе демоницы 1 и 2: Секса будет много

Блум М.
Инцел на службе демоницы
Фантастика:
фэнтези
5.25
рейтинг книги
Инцел на службе демоницы 1 и 2: Секса будет много

Весь цикл «Десантник на престоле». Шесть книг

Ланцов Михаил Алексеевич
Десантник на престоле
Фантастика:
альтернативная история
8.38
рейтинг книги
Весь цикл «Десантник на престоле». Шесть книг

Предатель. Цена ошибки

Кучер Ая
Измена
Любовные романы:
современные любовные романы
5.75
рейтинг книги
Предатель. Цена ошибки

Жандарм 2

Семин Никита
2. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Жандарм 2

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Агеева Елена А.
Документальная литература:
публицистика
5.40
рейтинг книги
Всемирная энциклопедия афоризмов. Собрание мудрости всех народов и времен

Истребитель. Ас из будущего

Корчевский Юрий Григорьевич
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.25
рейтинг книги
Истребитель. Ас из будущего

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Отмороженный 4.0

Гарцевич Евгений Александрович
4. Отмороженный
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Отмороженный 4.0

Треугольная шляпа. Пепита Хименес. Донья Перфекта. Кровь и песок.

Бласко Висенте Ибаньес
65. Библиотека всемирной литературы
Проза:
классическая проза
5.00
рейтинг книги
Треугольная шляпа.
Пепита Хименес.
Донья Перфекта.
Кровь и песок.

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Бастард Императора. Том 5

Орлов Андрей Юрьевич
5. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 5

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21