Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 14:

Проектирование интерфейса. Объекты диалоговых окон

Событие MouseMove (Мышь движется)

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

Если два элемента управления расположены очень близко друг к другу, то при быстром движении мыши событие MouseMove может не возникнуть для пространства между этими элементами. В таком случае нужно предусмотреть обработку этого события для обоих элементов.

Вот заголовок процедуры обработки события MouseMove для набора страниц и полосы вкладок:

Private Sub объект_MouseMove (index As Long,  ByVal Button As fmButton,  
ByVal Shift As fmShiftState,  ByVal X As Single,  ByVal Y As Single),

а для других элементов:

Private Sub объект_MouseMove (ByVal Button As fmButton,  
ByVal Shift As fmShiftState,  ByVal X As Single,  ByVal Y As Single),

Здесь параметры объект, index, Button, Shift, X и Y имеют тот же смысл, что и для событий MouseDown и MouseUp рассмотренных выше. Но множество значений для параметра Button у MouseMove больше.

Значение Описание
0 Никакая кнопка не нажата.
1 Нажата левая кнопка.
2 Нажата правая кнопка.
3 Нажаты левая и правая кнопки.
4 Нажата средняя кнопка.
5 Нажаты левая и средняя кнопки.
6 Нажаты средняя и правая кнопки.
7 Нажаты все три кнопки.

Значение, передаваемое в параметре Button, позволяет определить, какие кнопки мыши нажаты при ее движении, а параметр Shift - выяснить, какие из управляющих клавиш Shift, Ctrl и Alt при этом нажаты.

Событие RemoveControl (Удаление элемента)

Возникает при удалении элемента управления из диалогового окна, рамки или страницы.

Заголовок процедуры обработки события RemoveControl для набора страниц имеет вид:

Private Subобъект_RemoveControl (index As Long,  ctrl As Control),

а для других объектов:

Private Sub объект_RemoveControl (ctrl As Control)

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс страницы, с которой удаляется элемент, ctrl - удаляемый элемент.

Событие Scroll (Прокрутка)

Возникает, когда пользователь изменяет положение бегунка в полосе прокрутки и может быть возбуждено для полосы прокрутки, диалогового окна и рамки. Источником события Scroll может быть также вызов метода Scroll для диалогового окна. Оно не наступает при изменении значения полосы прокрутки из программы или если пользователь щелкнул не бегунок.

Заголовок процедуры обработки события Scroll для полосы прокрутки имеет вид:

Private Sub объект_Scroll (),
  • для набора страниц:
    Private Sub объект_Scroll (index As Long,  ActionX As fmScrollAction,  
    ActionY As fmScrollAction,  ByVal RequestDx As Single,  ByVal RequestDy 
    As Single,  ByVal ActualDx As MSForms. ReturnSingle,  ByVal ActualDy As MSForms. 
    ReturnSingle),
  • для рамки и диалогового окна:
    Private Sub объект_Scroll (ActionX As fmScrollAction,  ActionY As fmScrollAction,  
    ByVal RequestDx As Single,  ByVal RequestDy As Single,  ByVal ActualDx As MSForms. 
    ReturnSingle,  ByVal ActualDy As MSForms. ReturnSingle).

Здесь параметры имеют следующий смысл:

  • объект - имя объекта, которому принадлежит процедура,
  • index - индекс страницы, на которой происходит прокрутка,
  • ActionX - действие в горизонтальном направлении,
  • ActionY - действие в вертикальном направлении,
  • RequestDx - расстояние в точках, на которое требуется выполнить прокрутку по горизонтали,
  • RequestDy - расстояние в точках, на которое требуется выполнить прокрутку по вертикали,
  • ActualDx - расстояние в точках, на которое произошла прокрутка по горизонтали,
  • ActualDy - расстояние в точках, на которое произошла прокрутка по вертикали.

Вот возможные значения параметров ActionX и ActionY:

  • fmScrollActionNoChange = 0 нет изменений;
  • fmScrollActionLineUp = 1 небольшой сдвиг вверх на вертикальной полосе; небольшой сдвиг влево на горизонтальной полосе; движение эквивалентно нажатию стрелок вверх и влево на клавиатуре;
  • fmScrollActionLineDown = 2 небольшой сдвиг вниз на вертикальной полосе; небольшой сдвиг вправо на горизонтальной полосе; движение эквивалентно нажатию стрелок вниз и вправо на клавиатуре;
  • fmScrollActionPageUp = 3 на одну страницу вверх на вертикальной полосе прокрутки, на одну страницу влево на горизонтальной полосе прокрутки; движение эквивалентно нажатию клавиши PgUp на клавиатуре для передвижения полосы прокрутки;
  • fmScrollActionPageDown = 4 на одну страницу вниз на вертикальной полосе прокрутки, на одну страницу вправо на горизонтальной полосе прокрутки; движение эквивалентно нажатию клавиши PgDn на клавиатуре для передвижения полосы прокрутки;
  • fmScrollActionBegin = 5 на верхний край вертикальной полосы прокрутки, на левый край горизонтальной полосы прокрутки;
  • fmScrollActionEnd = 6 на нижний край вертикальной полосы прокрутки, на правый край горизонтальной полосы прокрутки;
  • fmScrollActionPropertyChange = 8 означает, что изменилось значение свойства ScrollTop или свойства ScrollLeft ; направления и размер сдвига зависят от того, какое из этих свойств изменилось и каково его новое значение;
  • fmScrollActionControlRequest = 9 элемент управления запрашивает свой контейнер выполнить сдвиг; размер сдвига зависит от конкретных взаимодействующих элементов;
  • fmScrollActionFocusRequest = 10 пользователь переходит к другому элементу управления; размер сдвига зависит от расположения выбранного элемента, этот элемент должен переместиться так, чтобы стать полностью видимым.

Событие Scroll с помощью параметров ActionX и ActionY сообщает о происшедшем действии, а с помощью параметров ActualDx и ActualDy передает расстояние, на которое перемещается полоса прокрутки. Используя эти данные, процедура обработки может вычислить новое положение бегунка в полосе и переместить его.

События SpinDown (Уменьшить счетчик), SpinUp (Увеличить счетчик)

Событие SpinDown возникает, когда пользователь щелкает кнопку счетчика "стрелка-вниз" для вертикального счетчика или "стрелка-влево" для горизонтального счетчика. Оно уменьшает значение счетчика. Событие SpinUp возникает, когда выбираются кнопки-стрелки "вверх" или "вправо". Это событие связано с увеличением значения счетчика.

Процедуры обработки этих событий не имеют аргументов:

Private Sub объект_SpinDown (), 
Private Sub объект_SpinUp ().

Событие Zoom (Расширение)

Возникает при изменении свойства Zoom у диалогового окна или элементов рамка и набор страниц.

Заголовок процедуры обработки события Zoom для набора страниц имеет вид:

Private Sub объект_Zoom (индекс As Long,  Процент As Integer)

а для рамки:

Private Sub объект_Zoom (Percent As Integer)

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс страницы, которая изменяет размер, а Percent (Процент) - задает размер растяжения или сжатия в процентах. Его возможные значения лежат в диапазоне от 10% до 400%. Если значения меньше 100, размер диалогового окна уменьшается, больше 100 - увеличивается. В процедуре можно задать величину этого параметра.

В следующем примере при расширении окна в него добавляется полоса прокрутки, а при уменьшении - она убирается.

Private Sub UserForm_Zoom (Proc As Integer) 
Dim NewSize As Double
If Proc >= 100 Then                     ' увеличение размера
    ScrollBars = fmScrollBarsBoth       ' создать полосы прокрутки
    ScrollLeft = 0
    ScrollTop = 0
    NewSize = Width * Proc / 100
    ScrollWidth = NewSize               ' ширина полосы прокрутки
    NewSize = Height * Proc / 100
    ScrollHeight = NewSize              ' высота полосы прокрутки
  Else                                  ' уменьшение размера
    ScrollBars = fmScrollBarsNone       ' скрыть полосу прокрутки
    ScrollLeft = 0
    ScrollTop = 0
  End If
End Sub
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.