- •Глава 1. Взгляд на Excel 2007 и vba
- •Окно программы Microsoft Excel 2007
- •Режим конструктора и элементы ActiveX
- •Свойства элемента управления “Кнопка”
- •Элементы управления “Поле” и “Надпись”
- •Сохранение рабочих книг Microsoft Excel
- •Уровень безопасности
- •Процедура, выполняемая при открытии книги
- •Поле со списком и список
- •Изображение
- •Динамическое изменение цвета кнопки
- •Пример вывода информации о текущем времени
- •Полоса прокрутки
- •Динамическое перемещение кнопки
- •Разработка игры
- •Переключатели
- •Основные сведения по vba
- •Заключение по первой главе
Динамическое изменение цвета кнопки
Разберем еще один пример, который опять будет связан с реакцией на перемещение мыши. Расположим на листе кнопку и сделаем так, чтобы при перемещении курсора мыши в области кнопки ее цвет менялся. Функциональность должна быть следующей:
при расположении курсора мыши в левой верхней части кнопки ее цвет должен быть красный;
при расположении курсора в правой верхней части кнопки цвет кнопки должен быть зеленый;
если курсор находится в нижней левой части — кнопка должна быть синей;
при расположении курсора в правой нижней части кнопка должна принять серый цвет.
Чтобы реализовать требуемый эффект оформим процедуру реакции на перемещение мыши над кнопкой так, как показано на листинге 1.17. Как видно из текста процедуры для свойства Name кнопки использовано C1.
Листинг 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(255, 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, выйти из режима конструктора и при перемещении мыши в пределах кнопки, посмотреть на изменение ее цвета.