- •Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Объекты UserFormиControls
- •Режим выполнения
- •Разработка приложения
- •Пример 1
- •Конструирование основной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с рабочей книгой
- •Элемент TextBox
- •Элемент ListBox
- •Пример 2
- •Конструирование форм
- •Процедуры
Процедуры
Так как в основной форме пользователь устанавливает цвет электронных часов и определяет способ отсчета времени (вперед или назад), которые используются в вызываемой форме, то в стандартном модуле Module1
Public up_down As Boolean 'порядок отсчета Public p As Long 'номер цвета |
объявим две глобальные переменные |
Public Sub el_watch() el_watch_custom.Show End Sub |
и запишем процедуру вызова основной формы. |
На процедурном листе основной формы el_watch_custom разместим процедуры.
Private Sub UserForm_Initialize() theColors.ColumnCount = 2 theColors.AddItem "red" theColors.List(0, 2) = RGB(255, 0, 0) theColors.AddItem "yellow" theColors.List(1, 2) = vbYellow theColors.AddItem "blue" theColors.List(2, 2) = RGB(0, 0, 255) theColors.AddItem "green" theColors.List(3, 2) = RGB(0, 255, 0) theColors.AddItem "magenta" theColors.List(4, 2) = vbMagenta theColors.AddItem "cyan" theColors.List(5, 2) = vbCyan p = 0 Frame1.ControlTipText = "Вперед или назад" End Sub |
Процедура выполняется при инициализации формы. Список цветов theColorsформируется методомAddItem. Список состоит из двух столбцов: первый столбец – название цвета, второй –число, определяющее цвет. При использовании методаAddItemзаполняется всегда только первый столбец добавляемой строки.
|
Второй столбец этой строки списка заполняется при помощи установки значения элемента массива списка. Номер строки элемента – номер строки списка, номер столбца элемента в нашем случае всегда 2. Нумерация строк списка начинается с нуля, а нумерация столбцов списка начинается с единицы. Цвета устанавливаются при помощи функцииRGBили при помощи константVBA.
Заголовок на верхней границе рамки Frame1задается свойствомCaption. Установленное свойствоControlTipText для рамкиFrame1 вызывает появление краткой подсказки"Вперед или назад" при наведении курсора на рамку.
Private Sub Cmd_exit_Click() Unload el_watch_custom End Sub
|
Процедура выполняется при нажатии на кнопку Exit. Активная форма выгружается и программа завершается. |
Private Sub Count_Down_Click() up_down = Count_Up.Value Count_Up.Value = False Count_Down.Value = False Frame1.Caption = "Down" ew.Show End Sub
|
Процедура выполняется при нажатии на переключатель Count_Down. Элемент управления Frame1 служит для объединения в группу двух переключателей Count_Up и Count_Down. |
Помещенные в рамку, они автоматически являются взаимоисключающими, т. е. при выборе одного из них другой сразу же получает значение False и отключается.
Глобальная переменная up_down получает значение False, т.к. переключатель Count_Up=False при нажатии на переключатель Count_Down.
Далее оба переключателя получают значение False, надпись на рамкеFrame1устанавливается вDown.
Private Sub Count_Up_Click() up_down = Count_Up.Value Count_Up.Value = False Count_Down.Value = False Frame1.Caption = "Up" ew.Show End Sub |
Процедура выполняется при нажатии на переключатель Count_Up_Click
|
Глобальная переменная up_downполучает значениеTrue, надпись на рамкеFrame1устанавливается вUp.Далее оба переключателя получают значение False и загружается и высвечивается вторая форма ew.
Private Sub theColors_Click() If theColors.ListIndex > -1 Then p = theColors.List(theColors.ListIndex, 2) Else p = RGB(255, 255, 255) End If End Sub |
Выполняется при щелчке на список theColors.
|
Если выбрана некоторая строка из списка цветов, то переменная p устанавливается в число, соответствующее выбранному из списка цвету (второй столбец выбранной строки списка). В противном случае переменная обнуляется (черный цвет).
На процедурном листе формы ew разместим процедуры.
Public Sub e_watch() Dim n As Integer Dim startTime As Date, stopTime As Date cmd_Go.Visible = False watch.Visible = True watch.BackColor = p left_but.Visible = True right_but.Visible = True startTime = Time stopTime = TimeSerial(Hour(startTime), Minute(startTime), Second(startTime) + sec.Value + 1) n = 1 Do If up_down Then watch.Caption = TimeSerial(Hour(startTime), Minute(startTime), Second(startTime) + n) Else watch.Caption = TimeSerial(Hour(stopTime), Minute(stopTime), Second(stopTime) - n) End If ew.Repaint Application.Wait TimeSerial(Hour(Time), Minute(Time), Second(Time) + 1) n = n + 1 Loop While Time < stopTime cmd_Go.Visible = True watch.Visible = False End Sub
|
Процедура e_watch – общая процедура. Она может вызываться при выполнении событийных процедур нажатия на кнопку Start или нажатия на свободное пространство формы ew. Процедура делает невидимой кнопку старта, делает видимыми область для высвечивания времени, командную кнопку выбора новых установок и выключатели, устанавливает начальное время и рассчитывает конечное время. Цвет фона часов устанавливается в значение глобальной переменной p. В цикле на заданное количество секунд (до тех пор, пока время не превысит расчетное при отсчете времени вперед или не станет меньше начального при отсчете назад) обновляется время, увеличиваясь или уменьшаясь на секунду в зависимости от значения глобальной переменной up_down, и обновляется модифицированная форма. По окончании процедуры кнопка старта становится видимой, а часы отключаются. |
Private Sub UserForm_Initialize() left_but.Visible = False right_but.Visible = False watch.Visible = False cmd_Go.SetFocus sec = 5 ew.Top = 250 ew.Left = 250 End Sub
|
Процедура инициализации формы делает невидимыми часы и выключатели, устанавливает фокус на кнопку старта, чтобы пользователь мог воспользоваться клавишей Enter для пуска часов. Свойства Top и Left устанавливают смещение диалогового окна таким образом, чтобы при работе были видны обе загруженные формы. Устанавливается 5 секунд по умолчанию для хода часов. |
Private Sub cmd_new_select_Click() 'Me.Hide ew.Hide End Sub |
Процедура cmd_new_select скрывает форму ew на время установки новых настроек пользователя. |
Private Sub cmd_GO_Click() e_watch End Sub
Private Sub UserForm_Click() e_watch End Sub
|
Процедуры cmd_GO_Click и UserForm_Click вызывают общую процедуру, запускающую часы.
|
Private Sub left_but_Click() up_down = False e_watch End Sub
Private Sub right_but_Click() up_down = True e_watch End Sub
|
Процедуры left_but_Clickиright_but_Clickобрабатывают события нажатия на выключатели. Кнопка выключатель ToggleButton показывает включен он или нет через положение кнопки: "нажата"/"отжата". |
В форме оба выключателя снабжены стрелками, обозначающими отсчет назад (стрелка влево) или отсчет вперед (стрелка вправо).
При нажатии стрелки влево выполняется процедура left_but_Click, в которой глобальная переменная up_down устанавливается в False, а при нажатии стрелки вправо выполняется процедура right _but_Click, в которой глобальная переменная up_down устанавливается в True. Затем вызывается общая процедура, запускающая часы.
Рис.7.14.Обе формы в режиме выполнения