Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по VBasic.doc
Скачиваний:
11
Добавлен:
17.09.2019
Размер:
1.16 Mб
Скачать

Технология Drag-and-Drop

В Windows-приложениях существует возможность перетаскивания различных объектов при помощи мыши, для чего используется технология Drag-and-Drop (перетащить и оставить). Это позволяет создавать приложения с более удобным интерфейсом, более интересные программы. Элемент, который перемещается, называется источником (source), а объект, в котором он будет после этого находиться (курсор мыши в момент окончания находится в его пределах), носит название адресат (target). Например: рисунок двигаем по форме: рисунок - источник; если курсор мыши в момент отпускания находится на форме, то форма приемник, если на другом объекте, то этот объект приемник.

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

Свойства, события и методы технологии Drag-and-Drop

Название

Описание

DragDrop

Событие, возникающее по окончании перетаскивания объекта

DragOver

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

DragIcon

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

DragMode

Свойство, которое устанавливает режим перетаскивания

0 – Manual (ручной)

1 – Automatic (автоматический)

Drag

Метод, используемый для перетаскивания в ручном режиме.

Рассмотрим сначала автоматический режим.

Упражнение1

Установите на форме рисунок, в Окне Свойств задайте ему автоматический режим перемещения. Теперь запустите программу и попробуйте переместить рисунок. Вы увидите движущуюся рамку, но при отпускании мышки рисунок на прежнем месте. А для того, чтобы он переместился, надо использовать событие DragDrop (событие, возникающее при отпускании мыши). В этот момент надо задать рисунку новые координаты, равные текущим координатам курсора. Рисунок перемещаем по форме, поэтому используем событие DragDrop.

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

Source – это наш рисунок, X, Y – координаты курсора в момент события.

Мы хотим, чтобы объект, который двигаем, остался в той позиции, где заканчиваем перемещение, т.е. его координаты должны быть – параметры X и Y события DragDrop. Следовательно, пишем:

Source.Left = X

Source.Top – Y

Запустите программу. Проверьте ее работу. А чтобы было красивее, допустим, что курсор мышки встает на середине объекта, и делаем поправку.

Source.Left = X – Source.Width/2

Source.Top = Y– Source.Height/2

Теперь, если установить на форме другие рисунки, надо только задать им автоматический режим перемещения, а в программе ничего добавлять уже не надо. Параметр Source означает именно тот объект, который мы перемещаем. Попробуйте задать свойство DragIcon, (файл, который при этом вызывается, должен иметь расширение .ico) и тогда при перемещении объекта его изображение изменится.

Рассмотрим теперь ручной режим

Не всегда удобно пользоваться автоматическим режимом перемещения. Если установлен DragMode=1, то объекты не реагируют на события левой клавиши, к тому же не всегда удается поставить точно объект. Разберем теперь ручной режим перемещения, используя метод Drag. Метод имеет параметр Action, определяющий то или иное состояние выполняемого перетаскивания.

Константа

Значение

Описание

VbCancel

0

Отмена операции

vbBeginDrag

1

Начало перетаскивания

VbEndDrag

2

Окончание перетаскивания

Вызов метода ИмяПеремещаемогоОбъекта.Drag(Action)

Например, когда мы хотим начать перемещение рисунка, надо написать img1.Drag(1)

Упражнение2

В объекте Папка установлен ручной режим перемещения. Для того чтобы папку можно было передвигать, надо в событии imgF_MouseDown, если нажата левая клавиша, вызвать метод Drag. If Button = vbLeftButton Then imgF.Drag (1). Это начало перемещения, а конец у нас уже запрограммирован в событии Form_DragDrop. Запустите программу, проверьте ее работу. Обратите внимание, что стрелка мыши после окончания перемещения всегда стоит посередине объекта, и если мы вначале поставим стрелку не посередине, то перемещение будет неточным. Этого можно избежать при ручном режиме.

Задайте две контейнерные константы, например xx и уу. В событии imgF_MouseDown одновременно с вызовом метода Drag напишите xx=X, yy=Y. Переменные X и Y в этом событии равняются координатам мышки относительно левого верхнего угла объекта. А при окончании перемещения сделайте поправку именно на эти величины. Тогда мышка всегда будет стоять относительно объекта одинаково.

Задание1. На форме установить объект Корзина. Изначально она пустая, если в нее что-нибудь положат (переместят), она становится полной, а объекты, которые в нее переместили, исчезают. При двойном щелчке по корзине, она становится пустой, а все объекты из нее видимые. Надо использовать события корзины DragDrop и DblClick

Домашнее задание:

  1. Создать программу "Мозаика" или иную придуманную Вами программу, где используется перетаскивание объекта.

  2. Дополнить проект "Корзина":

а) саму корзину тоже можно перемещать;

б) когда мышка показывает на левый нижний угол папки, она принимает вид двойной стрелки, и если дальше двигаем нажатую мышку, то папка соответственно меняет размеры.

Контрольные вопросы:

  1. Назовите основные события мыши. В каких случаях они происходят?

  2. Технология Drag-and-Drop, ее смысл, принципы работы.

  3. Параметр Source, для чего служит и в каких событиях.

  4. Различия автоматического и ручного способа перемещения объектов, преимущества и недостатки.

  5. Какие свойства объектов можно и нужно использовать при перемещении объектов?

УРОК 13

Цель урока. Изучение новых объектов Shape, Line, ComboBox. Ознакомление с разными способами и функциями задания цвета.