Читаем Офисное программирование полностью

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


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


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


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


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

Function StartDrag([Effect As fmDropEffect]) As

fmDropEffect

Эта функция обычно вызывается в операторе присваивания вида:

ResultEffect=объект. StartDrag([effect as fmDropEffect])

Необязательный параметр Effect и результат выполнения функции принадлежат перечислению fmDropEffect. Константы, входящие в это перечисление, имеют следующие значения:

fmDropEffectNone = 0 – не копировать и не передвигать опущенный исходный элемент на место назначения;

fmDropEffectCopy =1 – копировать опущенный исходный элемент на место назначения;

fmDropEffectMove = 2 – передвинуть опущенный исходный элемент на место назначения;

fmDropEffectCopyOrMove = 3 – скопировать или передвинуть опущенный исходный элемент на место назначения.

Параметр Effect задает цель операции и имеет по умолчанию значение 1 (fmDropEffectCopy). Обычно он опускается, поскольку значение по умолчанию задает наиболее вероятную цель операции. Значение, возвращаемое методом StartDrag, определяет результат выполнения операции. Его можно использовать для анализа того, что же произошло в результате перетаскивания на самом деле. Между запуском метода StartDrag в правой части оператора присваивания и присваиванием результата левой части переменной ResultEffect в процессе перемещения объекта происходит много событий. Работают обработчики этих событий, и результат говорит о том, как закончился этот процесс.

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

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

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

3. Создайте обработчик события Initialize для диалогового окна, обеспечивающего инициализацию начального состояния:

Private Sub UserForm_Initialize()

With Me.ListBox1

AddItem «январь»

AddItem «февраль»

AddItem «март»

AddItem «апрель»

AddItem «май»

AddItem «июнь»

AddItem «июль»

AddItem «август»

AddItem «сентябрь»

AddItem «октябрь»

AddItem «ноябрь»

AddItem «декабрь»

End With

End Sub

4. В результате инициализируется список «Месяц года», имеющий имя ListBox1. Готовясь перетащить этот элемент в другое место, пользователь выбирает элемент этого списка. Затем он нажимает левую клавишу мыши, и у списка возникает событие MouseMove, обработчик которого имеет много параметров. Приведем текст этого обработчика:

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

Dim MyDataObject As DataObject

Dim Msg As String

Msg = «Видимо, Вы уронили месяц при перетаскивании. Повторите операцию!»

If Button = 1 Then

Debug.Print «MouseMove»

Set MyDataObject = New DataObject

Dim Effect As Integer

MyDataObject.SetText ListBox1.Value

Effect = MyDataObject.StartDrag(fmDropEffectCopy)

If Effect = 0 Then MsgBox (Msg)

Debug.Print "Effect = ", Effect

End If

End Sub

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

Дополнительные элементы управления

В VBA, кроме перечисленных стандартных элементов управления, имеется ряд дополнительных. Дополнительные элементы управления являются самостоятельными объектами, обладающими как общими для всех элементов управления свойствами и методами, так и присущими только им свойствами и методами. Для добавления дополнительных элементов управления на панель элементов необходимо:

1) выбрать команду Сервис + Дополнительные элементы (Tools + Additional Controls);

Перейти на страницу:

Похожие книги

Язык программирования C++. Пятое издание
Язык программирования C++. Пятое издание

Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!Р'С‹ держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под стандарт С++11. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. Р' соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать РёС… наилучшие СЃРїРѕСЃРѕР±С‹ применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.Стенли Р'. Липпман работал старшим консультантом в Jet Propulsion Laboratory, архитектором РіСЂСѓРїРїС‹ Visual С++ корпорации Microsoft, техническим сотрудником Bell Laboratories и главным инженером- программистом по анимации в кинокомпаниях Disney, DreamWorks, Pixar и PDI.Р–РѕР·и Лажойе, работающий ныне в кинокомпании Pixar, был членом канадской РіСЂСѓРїРїС‹ разработчиков компилятора C/C++ корпорации IBM, а также возглавлял рабочую группу базового языка С++ в составе международной организации по стандартизации ANSI/ISO.Барбара Э. Му имеет почти тридцатилетний опыт программирования. На протяжении пятнадцати лет она работала в компании AT&T, сотрудничая с Бьярне Страуструпом, автором языка С++, и несколько лет руководила РіСЂСѓРїРїРѕР№ разработчиков С++.• Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования• Р

Барбара Э. Му , Жози Лажойе , Стенли Б. Липпман

Программирование, программы, базы данных