Разберем еще один пример, который опять будет связан с реакцией на перемещение мыши. Расположим на листе кнопку и сделаем так, чтобы при перемещении курсора мыши в области кнопки ее цвет менялся. Функциональность должна быть следующей:
Чтобы реализовать требуемый эффект, оформим процедуру реакции на перемещение мыши так, как показано в листинге 1.17. Как видно из текста процедуры, для свойства Name кнопки использовано C1.
1 2 3 4 5 6 7 8 9 10 11 12 13 | ' Листинг 1.17. Процедура, реализующая динамическое изменение цвета кнопки Private Sub C1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If X < C1.Width / 2 And Y < C1.Height / 2 Then C1.BackColor - RGB(2 55, 0, 0) ElseIf X > C1.Width / 2 And Y < C1.Height / 2 Then C1.BackColor - RGB(0, 255, 0) ElseIf X < C1.Width / 2 And Y > C1.Height / 2 Then C1.BackColor - RGB(0, 0, 255) Else C1.BackColor - RGB(190, 190, 190) End If End Sub |
Прокомментируем моменты, которые появились впервые. А именно: значение переменной Y, которое передается в программу, представляет собой координату курсора мыши в области кнопки по вертикали. Полный размер кнопки по вертикали отражается в значении се свойства Height. Координата Y изменяется от верхнего угла кнопки к нижнему, а координата X изменяется от левого угла кнопки к правому. В первом условии процедуры If X < C1.Width / 2 And Y < C1.Height / 2 Then
. Проверяется находится ли курсор в левой верхней части кнопки. Если условие выполняется, то цвет кнопки устанавливается красным. Для установки цвета используется свойство кнопки BackColor и внутренняя функция RGB: C1.BackColor - RGB(255, 0, 0)
.
Здесь RGB это функция Visual Basic, которая позволяет установить цвет объекта в виде сочетания трех основных цветов красного, зеленого и синего. Интенсивности каждого из этих основных цветов задаются в качестве трех входных параметров. При этом минимальное значение интенсивности цвета равняется 0 (в этом случае в составном цвете данный цветовой компонент просто отсутствует), а максимальное 255. В рассматриваемой строке задаются максимальная интенсивность для красного цвета и отсутствие компонентов зеленого и синего цветов. При подобном сочетании этих трех базовых цветов кнопка будет красной.
Продолжим рассмотрение текста процедуры, приведенной в листинге. Если первое условие не выполняется, то программа переходит к проверке второго условия: ElseIf X > C1.Width / 2 And Y < C1.Height / 2 Then
. Если оно выполняется, то устанавливается зеленый цвет кнопки: C1.BackColor - RGB(0, 255, 0)
. А если второе условие не выполняется, то проверяется третье условие: ElseIf X < C1.Width / 2 And Y > C1.Height / 2 Then
.
Если оно истинно, то цвет кнопки становится синим, а если ложно, то получается, что курсор мыши не находится ни в одной из трех просмотренных областей. Из этого однозначно следует, что курсор мыши располагается в нравом нижнем квадранте, и кнопка закрашивается серым цветом. Программа, таким образом, готова; теперь следует вернуться в Microsoft Excel, выйдя из режима конструктора, и при перемещении мыши в пределах кнопки посмотреть на изменение ее цвета.