double arrow

Что нового мы узнали?

В этом уроке мы научились:

Использовать стандартные окна сообщений Visual Basic для вывода информации.

Использовать окна ввода для простейшего сбора информации.

Создавать нестандартные диалоговые окна.

Интегрировать класс диалоговых окон в будущих приложениях.

 

УРОК

Работа с мышью

 

Обработка событий мыши

Перетаскивание

Перетаскивание OLE

Создание «пасхального яйца»

 

 

События мыши

 

До сих пор нам приходилось иметь дело с двумя событиями, связанными с мышью, — Click и DblClick (двойной щелчок). В этом уроке будет рассказано и о других событиях мыши, используемых в Visual Basic. K их числу относятся перемещение мыши и нажатия кнопок — самостоятельно или одновременно с клавишами Shift, Alt и Ctrl Эти события обрабатываются в процедурах MouseDown и MouseUp, а также MouseMove. В последнем событии удобно отображать и скрывать подсказки, когда указатель мыши проходит над кнопками панели инструментов. Различные элементы поддерживают разные события мыши. В этом уроке рассматриваются основные события мыши вместе со способами их применения. В частности, мы напишем небольшую программу, обрабатывающую процедуру перетаскивания. После этого вы будете хорошо представлять себе, какие события мыши следует использовать в ваших элементах.

 

Событие Click

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

 

Private Sub cmdOK_Click()

Unload Me

End Sub

 

Событие DblClick

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

 

Private Sub lstmembers_DblClick()

Dim m As clsMember

Set m = New clsmember

m.MemberName = lstMembers.Text

m.ShowMemberProperties Set m = Nothing

End Sub

 

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

 

Событие DragDrop

Событие DragDrop генерируется при сбрасывании объекта, перетаскиваемого мышью. Процедура события DragDrop имеет следующий синтаксис:

 

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

 

 

Обратите внимание на три параметра — перед тем как выполнять любые дальнейшие действия, можно проверить их значения. Параметр Source содержит имя элемента, сброшенного на текущий объект. Параметры X и Y определяют координаты указателя мыши на момент генерации события DragDrop(). Пользуясь ими, можно задать расположение элемента на приемнике. Более подробная информация о перетаскивании приведена в следующем разделе этого же урока.

 

Coбытие DragOver

Событие DragOver генерируется при протаскивании объекта над элементом. Процедура события имеет следующий синтаксис:

 

Private Sub target_DragOver(Source As Control, X As Single, Y As Single, State As Integer)

 

Source — имя протаскиваемого объекта. Параметры X и Y определяют координаты указателя мыши. Целая переменная State определяет состояние перетаскиваемого объекта по отношению к приемнику события.

 

Параметр State Назначение
  Объект входит в границы источника
  Объект покидает границы источника
  Объект перетаскивается внутри границ источника

 

С помощью этого события удобно сообщать пользователям, можно ли в настоящий момент сбросить перетаскиваемый объект. Например, вряд ли стоит разрешать сбрасывание объекта на кнопке; при генерации события DragOver() кнопки можно проверить параметр Source и задать свойству DragIcon значок «сбрасывание запрещено».

 

Событие MouseDown

Если нажать кнопку мыши и не отпускать ее, генерируется событие MouseDown. Процедура события MouseDown() имеет следующий синтаксис:

 

Private Sub target_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single).

 

Как и в других событиях мыши, параметры X и Y определяют положение указателя. Целый параметр Button принимает одно из трех значений.

 

Параметр Button Описание
  Левая кнопка мыши
  Правая кнопка мыши
  Средняя кнопка мыши

 

По значению этого параметра можно узнать, какая кнопка была нажата. Это удобно в тех случаях, когда при нажатии кнопки должно открываться контекстное меню элемента. Например:

 

Private Sub lstMembers_MouseDown(Button As Integer, Shift As Integer,

X As Single, Y As Single)

If Button = 2 Then

PopupMenu mnuMembers

End If

End Sub

 

Целочисленный параметр Shift описывает состояние клавиш Shift, Ctrl и Alt на момент нажатия кнопки. Он принимает следующие значения.

 

Параметр Shift Описание
  Клавиша Shift
  Клавиша Ctrl
  Клавиша Alt

 

Сумма этих величин определяет различные сочетания клавиш. Например, значение 6 означает, что были нажаты Ctrl и Alt, a значение 7 показывает, что все три управляющие клавиши были нажаты одновременно. При проверке параметра Shift часто используется ключевое слово And. C помощью вложенных конструкций If...Then можно отслеживать разные клавиши. Например, фрагмент:

 

If Shift = 6 Then

MsgBox "Нажаты клавиши Ctrl и Alt"

End If

 

эквивалентен следующему:

 

If Shift And 6 Then

MsgBox "Нажаты клавиши Ctrl и Alt"

End If

 

Событие MouseMove

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

 

Private Sub cmdExit_MouseMove(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

 

Параметры этого события идентичны параметрам события MouseDown. В следующем примере заголовок формы изменяется, когда указатель мыши проходит над кнопкой Exit:

 

Private Sub cmdExit_MouseMove(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

Me.Caption = "Нажмите, чтобы закрыть приложение"

End Sub

 

Аналогичный код можно включить и в процедуры событий MouseMove других элементов. До появления механизма подсказок я часто пользовался этим событием для вывода в строке состояния справочных сообщений.

 

Событие MouseUp

Если отпустить нажатую кнопку мыши над элементом, генерируется событие MouseUp(). Процедура события имеет следующий синтаксис:

 

Private Sub target_MouseUp(Button As Integer, Shift As Integer,

X As Single, Y As Single)

 

Его параметры совпадают с параметрами MouseDown и MouseMove. Во многих новых приложениях для Windows 95 это событие используется вместо Click. Например, в процедуру события MouseUp можно включить оператор End, чтобы пользователь мог продолжить работу с приложением даже после нажатия кнопки выхода. Чтобы отменить выход, следует отвести указатель мыши от кнопки и отпустить нажатую кнопку мыши. В этом случае оператор End не выполняется, поскольку событие MouseUp генерируется для другого объекта.

 

Перетаскивание

Перетаскивание все чаще используется в Windows-приложениях (например, для регулировки положения разделительной полосы в Windows Explorer). Благодаря ему многие операции выполняются быстрее и проще. Наделить приложение Visual Basic возможностью перетаскивания не так уж сложно. Следующий пример показывает, как это делается:

1. Создайте новый проект типа Standard EXE.

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

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

4. Задайте свойству Name верхнего списка значение lstA, а свойству DragIcon — значение \Graphics\Icons\DragDrop\Draglpg.ico.

5. Задайте свойству Name нижнего списка значение lstB, а свойству DragIcon -значение \Graphics\Icons\DragDrop\Draglpg.ico. Примерный вид формы показан на рис. 11.1.

 

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

6. Добавьте в процедуру события Form_Load() следующий фрагмент:

 

Private Sub Form_Load()

lstA,AddItem "Яблоки"

lstA.AddItem "Персики"

lstA,AddItem "Апельсины"

End Sub

 

7. Добавьте в процедуру события lstA_MouseDown() следующий фрагмент:

 

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

If lstA.ListCount > 0 Then

lstA.Drag 1

End If

End Sub

 

8. Добавьте в процедуру события lstA_DragDrop() следующий фрагмент:

 

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

If Source = lstB Then

lstA.Additem lstB.Text

lstB.RemoveItem lstB.ListIndex

End If

End Sub

 

9. Добавьте в процедуру события lstB_MouseDown() следующий фрагмент:

 

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

 

If lstB.ListCount > 0 Then

lstB.Drag 1

End If

End Sub

 

10. Добавьте в процедуру события lstB__DragDrop() следующий фрагмент:

 

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

If Source = lstA Then

lstB.Additem lstA.Text

lstA.RemoveItem lstA.ListIndex

End If

End Sub

 

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

Верхний список содержит несколько строк с названиями фруктов. Вы можете щелкнуть на любой строке и перетащить ее в нижний список. Когда указатель мыши окажется над ним, отпустите кнопку мыши. Затем строки можно перетащить обратно в верхний список (рис. 11.2).

 

Рис. 11.2. Перетаскивание строк

 

Ключевым для этой программы является метод Drag. Обратите внимание — в процедуре события MouseDown() он вызывается с параметром 1, который сообщает элементу о начале перетаскивания. Если параметр равен 0, перетаскивание прекращается. Иными словами, чтобы прекратить перетаскивание, следует присвоить свойствам Тор и Left значения координат x и у указателя мыши и вызвать метод Drag 0. При этом имитируется перемещение объекта, тогда как на самом деле оно выполняется в процедуре события DragDrop().

Наш разговор о перетаскивании подходит к концу. Попробуйте немного поэкспериментировать — развлекайтесь и заодно следите за происходящим. Возможно, вам захочется использовать перетаскивание в своих проектах. Обратите внимание на свойство DragIcon источника, то есть перетаскиваемого объекта. Если не задать его значение, вы увидите лишь контур перетаскиваемого объекта.

 

Перетаскивание OLE

В Windows 95 появился новый, более универсальный, тип перетаскивания — так называемое «перетаскивание OLE» (OLE drag-and-drop). Сокращение OLE означает Object Linking and Embedding, то есть «связывание и внедрение объектов». Этот тип перетаскивания позволяет перемещать текст, файлы и объекты между элементами, которые выполняют функции контейнеров OLE, — списками, текстовыми и графическими полями. В окне программы Visual Basic предусмотрены некоторые возможности, построенные на основе перетаскивания OLE. При перемещении файлов из Проводника Windows в папку диска С вы также выполняете операцию перетаскивания OLE.

При перетаскивании OLE создается глобальный объект, содержащий перетаскиваемые данные. В процедуре события OLEDragDrop можно получить доступ к содержимому объекта DataObject. Давайте поближе познакомимся с методами и событиями перетаскивания OLE.

 

Метод OLEDrag

Метод OLEDrag начинает операцию перетаскивания OLE. Он вызывается в тех случаях, когда вы хотите скопировать или переместить данные OLE между двумя контейнерами OLE. Метод имеет следующий синтаксис:

 

объект.0LЕDrаg

 

где объект — объект-контейнер OLE, который является источником для операции перетаскивания.

 

Свойство OLEDragMode

С помощью свойства OLEDragMode можно узнать, способен ли объект выполнять функции источника перетаскивания OLE и в каком режиме будет выполняться операция OLEDrag — в ручном или автоматическом. Свойство может принимать следующие значения.

 

vbOLEDragManual - 0 Принимается по умолчанию. Используется при создании ваших собственных обработчиков перетаскивания OLE в приложениях
VbOLEDragAutomatic - 1 Используется в тех случаях, когда Visual Basic организует автоматическую обработку операций перетаскивания OLE. Это самый простой способ обеспечить поддержку перетаскивания OLE в ваших приложениях

 

Свойство OLEDropMode

Свойство OLEDropMode похоже на OLEDragMode. Задавая его значение, вы определяете тип обработки событий сбрасывания OLE в вашем приложении. Свойство может принимать одно из трех значений.

 

vbOLEDropNone - 0   Принимается по умолчанию. Не позволяет контейнеру OLE выполнять функции приемника для событий сбрасывания OLE
VbOLEDropManual - 1 Используется при создании ваших собственных обработчиков сбрасывания OLE в приложениях
VbOLEDropAutomatic - 2 Используется в тех случаях, когда Visual Basic организует автоматическую обработку операций сбрасывания OLE. Это самый простой способ обеспечить поддержку сбрасывания OLE в ваших приложениях

 


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



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