Microsoft Excel

трюкиприёмырешения

Как настроить динамическое изменение цвета кнопки средствами VBA

Разберем еще один пример, который опять будет связан с реакцией на перемещение мыши. Расположим на листе кнопку и сделаем так, чтобы при перемещении курсора мыши в области кнопки ее цвет менялся. Функциональность должна быть следующей:

  • при расположении курсора мыши в левой верхней части кнопки ее цвет должен быть красным;
  • при расположении курсора в правой верхней части кнопки цвет кнопки должен быть зеленым;
  • если курсор находится в нижней левой части — кнопка должна быть синей;
  • при расположении курсора в правой нижней части кнопка должна стать серой.

Чтобы реализовать требуемый эффект, оформим процедуру реакции на перемещение мыши так, как показано в листинге 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, выйдя из режима конструктора, и при перемещении мыши в пределах кнопки посмотреть на изменение ее цвета.


Top