- •11. Пользовательские формы
- •Валютный калькулятор
- •Вставка пользовательской формы
- •Настройка пользовательской формы
- •Оконные координаты
- •Цвета визуальных компонентов
- •Добавление визуальных компонентов
- •Закрытие пользовательской формы
- •Открытие пользовательской формы
- •Глобальные переменные
- •Объединение визуальных компонентов в программу
- •Модуль формы
- •Модуль Валя
Объединение визуальных компонентов в программу
На форму в середину между двумя фреймами поместим два визуальных компонента TextBox для ввода рублевых курсов евро и доллара с именами KrsEuro и KrsDoll, а сверху в визуальном компоненте Label с именем КурсВалют сделаем подпись «Курс валют». В макрос Валюта добавим операторы задания начальных значений строкам ввода. VBA автоматически преобразует числа в строки.
KursEuro = 45.07
ValCalc.KrsEuro.Text = KursEuro
KursDoll = 30.62
ValCalc.KrsDoll.Text = KursDoll
Сделаем двойной щелчок по визуальному компоненту KrsEuro. Макрос KrsEuro_Change() будет обрабатывать событие «изменение строки текста» в визуальном компоненте KrsEuro: ввод в глобальную переменную KursEuro с анализом ошибок ввода «не число».
Если введено число, введенный текст будет черного цвета. Над строкой ввода в визуальном компоненте КурсВалют появится текст черного цвета «Курс валют». Веденная строка текста будет преобразована в число и присвоена глобальной переменной KursEuro.
Если введено не число, не будем выводить на экран окно с сообщением об ошибке. Ошибку будем отмечать прямо в строке ввода визуального компонента TextBox. Введенный текст станет красного цвета, а над строкой ввода в визуальном компоненте КурсВалют появится текст красного цвета «Не число». Пользователь исправит текст в строке, и снова запустится макрос KrsEuro_Change().
Private Sub KrsEuro_Change()
If IsNumeric(ValCalc.KrsEuro.Text) Then
ValCalc.КурсВалют.Caption = "Курс валют"
ValCalc.КурсВалют.ForeColor = &H80000008
ValCalc.KrsEuro.ForeColor = &H80000008 'черный
KursEuro = ValCalc.KrsEuro.Text
Else 'строка не число
ValCalc.КурсВалют.Caption = "Не число"
ValCalc.КурсВалют.ForeColor = &HFF&
ValCalc.KrsEuro.ForeColor = &HFF& 'красный цвет
End If
End Sub
Обратите внимание, что свойство ForeColor цвет текста в окне задается значениями интенсивности свечения субписелей красного, синего и зеленого. Легче всего задавать цвет с помощью окна свойств. Нужно в окне MsVB открыть форму, щелкнуть элемент TextBox, в окне Properties выделить свойство ForeColor, кнопкой ▼ открыть вкладку Palette или System и щелкнуть цвет. В правом поле свойства ForeColor появится шестнадцатеричное число интенсивностей цветов. Это число нужно скопировать в буфер и вставить в текст макроса. При этом редактор VBA удалит из числа незначащие цифры, цвет останется, который выбрали.
Сделаем такой же макрос для компонента KrsDoll, выполним макрос Валюта и проверим, как все работает. В каждом окне введем не число и убедимся, что цвет стал красный, а потом исправим на число и убедимся, что цвет стал черный. Введем курсы 48,25 и 32,41, щелкнем кнопку <Выход> и убедимся, что глобальные переменные получили введенные значения.
Для ввода исходной суммы денег добавим на форму визуальный компонент Label с именем ВведитеВалюту, заголовок «Введите валюту», и визуальный компонент TextBox с именем InVal. Запрограммируем макрос InVal_Change() на ввод исходной суммы Sinput с такой же проверкой на ошибки ввода «не число». Текст аналогичен макросу KrsEuro_Change()
Для вывода пересчитанной суммы денег Sout добавим на форму визуальный компонент Label с именем ПолучитеВалюту, заголовок «Получите валюту», и визуальный компонент TextBox с именем OutVal. В этом окне будет только вывод
ValCalc.OutVal.Text = Round(Sout, 2)
который будет находиться в макросе командной кнопки <Пересчитать>. Функция Round округляет результат до двух десятичных цифр.
Текст макроса:
Private Sub Пересчет_Click()
If KursEuro <= 0 Or KursDoll <= 0 Then Exit Sub
Srub = Sinput * (pInRub _
+ pInEuro * KursEuro + pInDoll * KursDoll)
Sout = Srub * (pOutRub _
+ pOutEuro / KursEuro + pOutDoll / KursDoll)
ValCalc.OutVal.Text = Round(Sout, 2)
End Sub
В операторе If выполняется проверка, чтобы не было деления на ноль.
Запустим макрос Валюта и переведем 100 рублей в евро. Все работает правильно.
В заключение приведем окно валютного калькулятора, текст макроса формы и текст макроса Валя.
