ТОП 10:

Методы программируемого перетаскивания



 

В системе Windows часто применяется метод перетаскивания (как способ обмена данными между объектами Windows): когда необходимо переместить предмет с одного места на другое, вы «берёте» этот предмет и помещаете его в новое место. Этот процесс называется перетаскиванием (технология Drag&Drop – «перетащил и бросил»).

В процессе перетаскивания участвуют два объекта:

· объект источник;

· объект - приемник.

 

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

Визуально процесс перетаскивания может быть различным: иногда объект действительно «прилипает» к указателю и движется вместе с ним (перемещение фрагментов рисунка в программе Paint), иногда вместе с указателем движется только контур объекта (перемещение графических объектов в Word for Windows), а иногда о перетаскивании говорит только форма указателя мыши.

 

Решение задачи по перетаскиванию объекта состоит из трех этапов:

I этап. Начало процесса перетаскивания.

Это этап разбивается на две части:

· Переход системы в режим перетаскивания. Для того, чтобы сообщить системе о переходе в режим перетаскивания используется событие, связанное с мышью - MouseDown (Нажатие кнопки мыши). При этом процедуре обработки события передается несколько параметров:

 

Control_MouseDown( Button As Integer, Shift As Integer, X As Single, Y As Single)

 

Здесь параметры Button и Shift определяют состояние кнопок мыши и управляющих клавиш соответственно, а X и Y определяют текущую позицию курсора мыши на экране относительно верхней левой точки элемента управления в момент нажатия. Значения параметров события MouseDown приведены в таблице 1.

Таблица 1.

Параметр Значение
Button Нажата кнопка мыши: 1 = левая; 2 = правая; 4 = средняя
Shift Нажата клавиша: 0 = ничего; 1 = [Shift]; 2 = [Ctrl],4 = [Alt]
X Координата Х
Y Координата Y

· Начало процесса перетаскивания. Назначением этого этапа является «захват» перетаскиваемого объекта с помощью курсора мыши. Для того чтобы сообщить системе о начале процесса перетаскивания применяется метод Drag [3], формат записи его вызова:

Control.Drag vbBeginDrag

Константу vbBeginDrag при вызове метода указывать не обязательно.

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

 

II этап. Связывание перетаскиваемого объекта с курсором мыши.

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

Для этого используется событие, связанное с объектом, над которым находится указатель мыши - DragOver. Это событие наступает при пересечении границ объекта, когда указатель мыши входит в окно объекта, покидает его или останавливается на нем.

Формат его записи следующий:

 

Control _DragOver(Source As Control, X As Single, Y As Single, State As Integer)

 

Процедуре обработчику этого события передаются четыре параметра:

- параметр Source указываетнапереносимый объект;

- параметр State возвращает причину активизации события и определяет положение курсора мыши по отношению к объекту, принимая следующие значения:

· vbEnter - указатель мыши вошел в окно объекта;

· vbLeave - указатель мыши покинул окно объекта;

· vbOver - указатель мыши остановился в окне объекта;

- параметры X и Y содержат текущие горизонтальную и вертикальную координаты курсора мыши.

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

 

III этап. Окончание процесса перетаскивания.

Процесс перетаскивания заканчивается, как только происходит отпускание кнопки мыши.

Щелчок кнопки мыши подразумевает ее нажатие (MouseDown) и отпускание (событие, связанное с отпусканием кнопки называется MouseUp). Однако простой щелчок мышью (при котором происходит отпускание кнопки мыши) не используется в процессе перетаскивания.

Для окончания процесса перетаскивания используется событие DragDrop, относящееся к перетаскиваемому объекту:

 

Control_DragDrop(Source As Control, X As Single, Y As Single)

 

 

Типы данных, определяемые пользователем

 

Типов данных языка VB обычно хватает, чтобы разделить всю информацию на текстовые и числовые компоненты. Но этих типов не достаточно при работе с данными, которые требуется сгруппировать по какому-либо признаку. В этих случаях на помощь приходят авторские составные типы данных, конструируемые как комбинации простых типов.

Определяемый пользователем тип данных VB(user-defined type, UDT)– это механизм, позволяющий программисту при помощи ключевых слов Type…End Type создавать собственные типы данных.

Для определения пользовательского типа данных используется следующий формат записи:

 

[ Private | Public] TypeИмя Типа

Элемент1 AsТип

[Элемент2 AsТип]

‘…

End Type

Отдельные части структуры Type могут быть любого типа, в том числе и массивами.

 

Такие типы данных объявляются в разделе объявления модуля (формы, стандартного, класса) в секции (General) (Declaration).

 

Пример.

‘ (General) (Declaration) (Module)

‘Описание нового типа данных

Type Men

Name As String

Growth As Single

Old As Integer

End Type

 

Type Women

Name As String

ColorEyes As String

Growth As Single

End Type

 

Объявив собственный тип данных, используем его для объявления переменных этого типа. Доступ к элементам структуры пользовательского типа осуществляется по аналогии с доступам к свойствам объектов.

 

(Form1)

‘Использование нового типа данных, создание экземпляров ‘структур Men и Women

‘ (General) (Declaration)

Dim Smirnoff As Men, Sally As Women

 

Private Sub Form_Load()

Show

Smirnoff.Growth = 1.85

Sally.ColorEyes = "голубые"

 

Print "Рост Смирнова "; Smirnoff.Growth

Print "Глаза Салли "; Sally.ColorEyes

End Sub

 

Константы

 

Благодаря применению констант достигается более высокая производительность программы, поскольку VB вычисляет их значение уже на стадии компиляции, а не во время работы программы. Это обусловлено основным отличием констант от переменных – значение констант нельзя менять в процессе выполнения программы, они всегда сохраняют значение, присвоенной при разработке.

Константы бывают локальные, контейнера и глобальные. При объявлении констант используется ключевое слово Const.

 

[ Public | Private] Const ИмяКонстанты = Значение

Глобальная константа объявляется как Public, при этом следует иметь в виду, что глобальные константы могут объявляться только в модуле. По умолчанию все константы будут закрытыми (Private). Вы можете явно указывать модификаторы доступа Public или Private, объявляя константы на уровне модуля, но не на уровне процедуры.

Одновременно с объявлением константе присваивается и значение. В качестве значения допускается использовать только постоянные значения и их комбинации, включая арифметические и/или логические операторы, но не функции.

 

Например.

Const Pi = 3/14159

Public Const nName = “Ann Smith”

 

Константы можно объявлять и с указанием типа данных, тогда конструкция объявления констант следующая:

 

[ Public | Private] Const ИмяКонстанты As ТипДанных = Значение

Const Pi As Single = 3/14159

 

В VB имеется большое количество встроенных констант, информацию о них, их значении и применении можно получить воспользовавшись каталогом объектов Object Browser. Типичными для VB константами являются константы дней недели vbSaturday (день недели - суббота), vbCalCreg (указатель на использование Григорианского календаря), vbRed (константа, указывающая на использование красного цвета).

 

Перечислимые типы (перечислимые константы)

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

В принципе с перечислениями констант вы уже встречались, когда напротив переменной типа Boolen ставили знак равенства. При этом VB выдавал список из набора двух констант: True и False.

Перед использованием собственного списка констант его надо определить (создать или описать) в программе с использованием блока Enum…End Enum в общем разделе объявлений:

Enum Имя_Типа

Имя_констнты1 = значение

Имя_констнты2 = значение

 

Имя_констнтыN = значение

End Enum

 

Например, рассмотрим перечисление Ocenca, где константы перечисления – это оценки, получаемые студентами:

Form1 (Code)

(General)

Enum Ocenca

neud = 3

horosho = 4

otlichno = 5

End Enum

 

Это выражение выполняет две задачи:

· создается перечислимая константа нового типа по имени Ocenca.

· Определяются символьные константы со значением neud – 3, horosho – 4 и т.д.

 

Присваивать значения константам внутри блока Enum…End Enum не обязательно. Если этого не сделать, то константы будут принимать значения 0,1,2,3 и т.д.

 

'создаем пользовательский тип

'поскольку объявление в модуле формы, слово Private обязательно

Private Type Student

FIO As String

Age As Byte

'создаем переменные типа Ocenca

ExamFizica As Ocenca

ExamLP As Ocenca

End Type

 

'экземпляр пользовательского типа

Dim Ivanov As Student

 

Private Sub Form_Load()

Show

Ivanov.ExamLP = neud

Print "Успеваемость Иванова "; Ivanov.ExamLP

End Sub

 

Результат: Успеваемость Иванова 3

 

 


[1] Для предоставления функции псевдонима имеется несколько причин. В частности имя содержащейся в библиотеке DLL функции может содержать запрещенные в VB символы. Кроме того, имя библиотечной функции может совпадать с зарезервированным словом VB.

[2] Когда OLE расшифровывают как Object Linking and Embedding (связывание и внедрение объектов), это не совсем верно. На самом деле следовало бы говорить Object Linking or Embedding (связывание или внедрение объектов). Дело в том, что с объектами OLE можно осуществлять только одну из двух операций: либо связывание, либо внедрение.

 

[3] Методу Drag на вход может передаваться один из следующих аргументов:

· vbCancel – отменить перетаскивание;

· vbBeginDrag – начать операцию перетаскивания;

· vbEndDrag – закончить операцию перетаскивания.

 







Последнее изменение этой страницы: 2016-08-12; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.239.172.52 (0.018 с.)