Функции в языке Visual Basic
Понятие функции в языке программирования близко к понятию функции в математике. Функция может иметь один или более аргументов. При записи функции нескольких аргументов аргументы в списке отделяются друг от друга запятыми:
ИмяФункции(СписокАргументов)
Для каждого набора аргументов можно определить значение функции. В программировании говорят, что функция возвращает свое значение, если заданы значения ее аргументов. Функции обычно входят в состав выражений, значения которых присваиваются переменным.
Функции могут быть различных типов: преобразования типов данных, математические, строковые, финансовые, даты и др. Тип функции определяется возможными значениями аргументов и функции.
4.9.1. Функции преобразования типов данных
3 j |
Функции преобразования реализуют преобразование данных из одного типа в другой.
Функция Val. Часто необходимо преобразовать строковое значение в числовое. Это можно сделать с помощью функции Val, аргументом которой является строка, а значением — число:
i/ , Val(Строка$)
Например, значением функции Val("2000") является число 2000. Эта функция часто применяется для преобразования строкового значения свойства Text текстовых полей в число, которое затем используется в арифметических выражениях.
Воспользуемся функцией Val для создания приложения «Обычный калькулятор», которое будет производить арифметические действия над целыми десятичными числами, которые будут вводиться и выводиться в текстовые поля на форме. Для создания графического интерфейса приложения разместим на форме три текстовых поля (два поля для ввода числовых данных и одно для вывода результата) и пять кнопок для реализации событийных процедур: сложения, вычитания, умножения, деления и завершения работы.
Проект «Обычный калькулятор»
1. Создать новый проект. Разместить на форме три текстовых поля и пять кнопок. Присвоить им имена: txtl, txt2, txt3, cmdPlus, cmdMmus, cmdUmn, cmdDelen, cmdExit.
Событийная процедура сложения CmdPlus_Click должна изменять значения свойства Text текстового поля txt3 так, чтобы оно являлось суммой числовых значений свойства Text текстовых полей txtl и txt2. Для преобразования строковых значений, вводимых в текстовые поля, в десятичные числа, воспользуемся функцией Val. Код событийной процедуры будет следующим:
Sub cmdPlus_Click()
txt3.Text = Val(txtl.Text) + Val(txt2.Text)
End Sub
Событийные процедуры вычитания, умножения и деления создаются аналогично.
2. Для каждой из кнопок ввести программные коды событийных процедур.
3. Установить для свойства Alignment текстовых полей значение Right Justufy.
4. Запустить проект на выполнение. Ввести числа в два левых текстовых поля и щелкнуть по кнопке арифметической операции. В правом поле будет выведен результат.
Проект хранится в каталоге шггг=>
\textbook\VB\DnVB3\ CD-ROM
\textbook\VB\prjVB3\ ___
Строковое выражение, являющееся аргументом функции Val, может быть задано не только в десятичной, но также в восьмеричной (приставка "&0")и шестнадцатеричной (приставка " &Н") системах счисления. Например, значением функций Val ("&03720") и Val ("&H7D0") является десятичное число 2000.
Таким образом, появляется возможность перевода чисел, выраженных в строковой форме, из восьмеричной и шестнадцатеричной систем счисления в число десятичной системы счисления.
Функции Str, Hex, Oct. Функции Str, Oct и Hex позволяют производить преобразование десятичных чисел в десятичные, восьмеричные и шестнадцатеричные числа в строковой форме. Аргументом функции является десятичное число, а значением — строка:
Str (Число) Oct(Число) Hex(Число)
Например, значением функций Str (2000), Oct (2000), Hex (2000) является десятичное число 2 000, восьмеричное число 3720 и шестнадцатеричное число H7D0 в строковой форме
Создадим проект, который позволит переводить целые числа из десятичной системы счисления в восьмеричную и шестнадцатеричную и обратно — из восьмеричной и шестнадцатеричной в десятичную.
ДЙ Проект «Перевод чисел»
1. Создать новый проект. Разместить на форме три текстовых поля (txtDec, txtOct, txtHex) для ввода и вывода чисел, четыре кнопки (cmdDecOct, cmdDecHex, cmdOct- Dec, cmdHexDec) для создания событийных процедур, реализующих перевод чисел, и три метки (lblDec, lblOct, lblHex) для вывода поясняющих надписей над текстовыми полями.
К вводимым в текстовые поля txtOct и txtHex в строковой форме числам добавим восьмеричную и шестнадцате-
ричную приставки "&0" или "&Н" с помощью операции конкатенации строк. Полученное восьмеричное или шестнадцатеричное число в строковой форме переведем в десятичную числовую форму с помощью функции Val.
2. Ввести событийную процедуру cmdOctDec_Click (), реализующую перевод чисел из восьмеричной системы в десятичную:
Sub cmdOctDec_Click()
txtDec.Text = Val("&0" + txtOct.Text) End Sub
3. Создать событийную процедуру cmdHexDec_Click (), реализующую перевод чисел из шестнадцатеричной системы в десятичную.
Введенные в текстовое поле txtDec числа будем переводить сначала из строковой формы в числовую с помощью функции Val, а затем из десятичной числовой в строковую восьмеричную или шестнадцатеричную с помощью функций Oct или Hex.
4. Создать событийную процедуру cmdDecHex_Click (), реализующую перевод чисел из десятичной системы в шестнадцатеричную :
Sub cmdDecHex_Click()
txtHex.Text = Hex(Val(txtDec.Text))
End Sub
5. Создать событийную процедуру cmdDecOct_Click (), реализующую перевод чисел из десятичной системы в восьмеричную.
6. Запустить проект. Для перевода десятичного числа в восьмеричную и шестнадцатеричную системы счисления ввести в левое текстовое поле десятичное число и последовательно щелкнуть по кнопкам Dec-Oct и Dec-Hex.
Проект хранится в каталоге пг. \textbook\VB\prjVB4\ CP-ROM 1ИГ
Функция As с. Функция As с осуществляет преобразование строки в числовой код (в таблице кодировки) первого символа. Аргументом функции является строка, а значением — число:
&
Функция Chr. Функция Chr осуществляет преобразование числового кода в соответствующий ему символ. Аргументом функции является число, а значением — символ:
Chr(Число)
Создадим проект «Коды символов», который выводит числовой код введенного символа, а также распечатывает символы по числовым кодам (выводит кодировочную таблицу символов).
„Щ Проект «Коды символов»
1. Создать новый проект. Разместить на форме два текстовых поля txtS, txtN и две кнопки cmdS и cmdT.
Воспользуемся функцией Asc () для преобразования символа, вводимого в текстовое поле txtS, в его числовой код, выводимый в поле txtN.
2. Ввести событийную процедуру cmdS_Cl ick (), реализующую преобразование символа в его числовой код:
Sub cmdS_Click()
txtN.Text = Asc(txtS.Text)
End Sub
Воспользуемся циклом со счетчиком с шагом -1, для того чтобы печатать на форме символы, начиная с символа, имеющего наибольший числовой код (255). Такая последовательность вывода символов связана с тем, что первые 33 числовых кода (от 0 до 32) соответствуют не символам, а управляющим клавишам клавиатуры (клавиши управления курсором, Пробел, Ввод и др.).
3. Ввести код событийной процедуры cmdT_Click (), которая осуществляет вывод кодировочной таблицы символов на форму:
Dim strA As String, N As Integer
Sub cmdT_Click()
For N = 255 To 33 Step -1
strA = Chr(N)
0 |
Asc (Строка$) |
Print "Числовой код"; N; " - "; strA Next N End Sub
Запустить проект. Для получения числового кода в нижнем текстовом поле ввести символ в верхнее поле и щелкнуть по кнопке Код символа.
Jnjxl |
Числовой Числовой Числовой Числовой Числовой Числовой Числовой Числовой Числовой Числовой Числовой Числовой Числовой |
код 255 - я код 254 - ю код 253 - э код 252 - ь код 251 - ы код 250 - ъ код 249 - щ код 248 - ш код 247 - ч код 246 - ц код 245 - х код 244 - ф код 243 -у |
Код символа Кодировочноя таблица |
Для получения таблицы кодировки символов щелкнуть по кнопке Кодированная таблица.
Проект хранится в каталоге \textbook\VB\prjVB5\
Практические задания |
4.16. Разработать проект «Мультисистемный калькулятор», который позволяет производить арифметические операции над целыми числами в десятичной, восьмеричной и шестнадцатеричной системах счисления.
4.9.2. Математические функции
В математических функциях значениями как аргументов, так и функций являются числа. В языке Visual Basic имеется 12 математических функций: тригонометрические (Sin (), Cos (), Tan (), Atn ()), квадратный корень Sqr(), логарифм Log (), показательная функция Ехр (), получение случайного числа Rnd()и др.
Воспользуемся математическими функциями для расширения возможностей проекта «Обычный калькулятор» и превращения его в проект «Инженерный калькулятор».
.J|j Проект «Инженерный калькулятор»
1. Открыть проект «Обычный калькулятор». Добавить на форму шесть кнопок cmdSin, cmdCos, cmdTan, cmdSqr, cmdSt и cmdLog.
CD-ROM ВЗГ" |
Для каждой из этих кнопок создать событийные процедуры, реализующие вычисление соответствующих функций: синуса, косинуса, тангенса, квадратного корня, возведения в степень и натурального логарифма.
2. Например, для возведения в степень событийная процедура cmdSt_Click () примет вид:
Sub cmdSt_Click()
txt3Dec.Text=Val(txtlDec.Text)^Val(txt2Dec.Text) End Sub
3. Ввести самостоятельно программный код других событийных процедур с использованием встроенных функций языка Visual Basic: Sin(), Cos(), Tan(), Sqr() и Log() .
4. Запустить проект на выполнение.
Проект хранится в каталоге \textbook\VB\prjVB6\___ |
Произвести вычисление, например, 232: ввести числа 2 и 32 и щелкнуть по кнопке XT.
Практические задания |
4.17. Разработать проект, позволяющий вычислить гипотенузу и площадь прямоугольного треугольника, если известны его катеты.
4.9.3. Строковые функции
В строковых функциях строками являются либо аргументы, либо возвращаемые функциями значения.
Функция определения длины строки. В функции определения длины строки Len (Строка$) аргументом является строка Строка$, а возвращает функция числовое значение длины строки (количество символов в строке). Синтаксис функции:
Len(Строка$)
Пусть аргументом функции Len будет строка "информатика", тогда значением целочисленной переменной
CD-ROM (Щ3 |
1.падлинаСтроки = Len ("информатика") будет число 11.
Функции вырезания подстроки. В функциях вырезания подстроки (части строки) Left (Строка?, Длина%), Right(Строка?, Длина%) и Mid(Строка?, Позиция%, Длина%) аргументами являются строка Строка? и числа или целочисленные переменные Длина% и Позиция%. Функции возвращают строковое значение, длина которого равна Длина%. Синтаксис функций:
Left(Строка?, Длина%)
Right(Строка?, Длина%)
Mid(Строка?, Позиция!, Длина%)
Значением функции Left является левая подстрока, которая начинается от крайнего левого символа строки и имеет количество символов, равное значению числового аргумента Длина%.
Пусть аргументом функции Left будет строка "инфор матика", тогда значением строковой переменной strJIeBafl Подстрока = Left ("информатика", 2) будет строка "ин".
Значением функции Right является правая подстрока, которая начинается от крайнего правого символа строки и имеет количество символов, равное значению числового аргумента Длина %.
Пусть аргументом функции Right будет строка "информа тика", тогда значением строковой переменной strnpaeaH Подстрока = Right("информатика",4) будет строка "тика".
Значением функции Mid является подстрока, которая начинается с символа, находящегося в позиции, заданной числовым аргументом Позиция%, и имеет количество символов, равное значению числового аргумента Длина%.
Пусть аргументом функции Mid будет строка "информа тика", тогда значением строковой переменной strnoflCTpoKa = Mid("информатика",3,5)будет строка "форма".
Создадим строковый калькулятор, который позволит производить различные преобразования строк.
ЛЦ Проект «Строковый калькулятор»
1. Разместить на форме три текстовых поля (txtl, txt2 — для ввода строк, txt3 — для вывода результата) и кнопку cmdCon.
2. Для кнопки ввести программный код событийной процедуры cmdCon_Click (), реализующий операцию конкатенации:
Sub cmdCon_Click()
txt3.Text = txtl.Text + txt2.Text End Sub
3. Запустить проект, в два первых поля ввести строки и щелкнуть по кнопке Конкатенация. В третьем поле появится результат сложения двух строк.
Воспользуемся теперь для преобразования строк строковой функцией Mid$ (строка?,bytM,bytN). Функция вырезает из строки? подстроку, начинающуюся с символа, позиция которого в строке задается целочисленной переменной bytM, и имеющую длину, заданную целочисленной переменной bytN.
4. Разместить на форме два текстовых поля txtlMid и txt2Mid для ввода значений переменных bytM и bytN и кнопку cmdMid.
5. Для кнопки ввести программный код событийной процедуры cmdMid_Click () , реализующий операцию вырезания подстроки. Для преобразования строковых значений свойства Text текстовых полей в числа использовать функцию Val:
Sub cmdMid_Click()
txt3.Text = Mid?(txtl.Text, Val(txtlMid.Text), Val(txt2Mid.Text)) End Sub
6. Запустить проект, в первое поле ввести строку, в поля ввода аргументов функции вырезанной подстроки ввести числа и щелкнуть по кнопке Mid$. В третьем поле появится вырезанная подстрока.
Для определения количества символов в строке используется функция определения длины строки Len (строка?) , аргументом которой является строка, а возвращает функция число, равное количеству символов в строке.
7. Разместить на форме кнопку cmdLen и ввести программный код событийной процедуры cmdLen Click (), реализующий операцию определения количества символов в строке:
«к (.трахавы* кальк^яетпр |
* L i рияо¥шн n <sm*imn up |
Illy]' lll'i'l |
Sub cmdLen_Click () txt3.Text = Len(txtl.Text) End Sub 7— 2645
8. Запустить проект, в первое поле ввести строку и щелкнуть по кнопке Len. В третьем поле появится число символов в строке.
Для преобразования символов в соответствующий им числовой код используется функция Азс(строка$) , при этом необходимо иметь в виду, что функция возвращает числовой код первого символа строки.
9. Разместить на форме кнопку cmdAsc и ввести программный код событийной процедуры cmdAsc Click (), реализующий операцию определения числового кода символа:
ЕЭ ■ ■ |
CD-ROM D3T |
Sub cmdAsc__Click () txt3.Text = Asc(txtl.Text) End Sub 10. Запустить проект, в первое поле ввести символ и щелкнуть по кнопке Asc. В третьем поле появится числовой код символа.
Проект хранится в каталоге \textbook\VB\prjVB7\
Практические задания
4.18. Модернизировать проект «Строковый калькулятор». Добавить возможности вырезания из строки левой и правой подстрок, определение позиции начала подстроки в строке и преобразования числового кода символа в символ.
JHSSgjg |
4.9.4. Функции ввода и вывода
Функция InputBox (Окно Ввода). Функция InputBox позволяет вводить данные с помощью диалоговой панели ввода. В качестве аргументов этой функции выступают три строки, значением функции является также строка. Синтаксис функции следующий:
InputBox(Приглашение$, Заголовок$, [ПоУмолчанию$])
В процессе выполнения этой функции появляется диалоговая панель с текстовым полем. В строке заголовка панели будет печататься значение второго аргумента (Заголовок?), на самой панели печатается значение аргумента Приглашение?, в текстовом поле печатается значение аргумента ПоУмолчанию? (если это значение отсутствует, содержимое текстового окна также отсутствует). Введенная пользователем в текстовом поле строка становится значением функции.
V 0 |
ЧисКод1 | Пиктограмма |
О | |
ф | |
& | |
i? |
Функция MsgBox (Панель Сообщений). Функция MsgBox позволяет выводить сообщения не на форме, а на специальной панели сообщений. Кроме того, функция MsgBox возвращает определенное значение, которое может быть присвоено какой-либо переменной. Синтаксис функции следующий:
MsgBox(Сообщение?[, ЧисКод1+ЧисКод2][, Заголовок? ] )
Строка Сообщение? выводится на панель сообщений, аргумент ЧисКод1+ЧисКод2 определяет внешний вид панели, а строка Заголовок? печатается в строке заголовка панели. Последние два аргумента не являются обязательными.
Внешний вид панели сообщений можно менять, используя различные значения ЧисКод1 и ЧисКод2. Значение Чис- Код! определяет вид пиктограммы, которая помещается на панель сообщений, а значение ЧисКод2 определяет набор кнопок, размещаемых на панели (табл. 4.4).
Таблица 4.4. Значения чисКод1 и ЧисКод2, определяющие вид панели сообщений
|
С помощью одного числа, являющегося суммой чисел ЧисКод1 и ЧисКод2, можно одновременно установить определенную пиктограмму и определенную комбинацию кнопок, размещенных на панели сообщений. Например, число 36 можно рассматривать как сумму чисел 32 (код пиктограммы «Вопрос») и 4 (код комбинации кнопок Да, Нет). В этом случае функция MsgBox выводит панель сообщений с текстом, пиктограммой, содержащей знак вопроса, и кнопками Да, Нет. Нажатие на кнопку приводит к вычислению значения функции, которое зависит от нажатой кнопки (табл. 4.5).
Таблица 4.5. Значения функции MsgBox
|
Разработаем проект, который позволит контролировать знания. Алгоритм контроля должен последовательно реали- зовывать следующие операции:
• задать (напечатать) вопрос;
• запросить ответ и запомнить введенное с клавиатуры значение;
• полученный ответ сравнить с правильным и, в зависимости от выполнения или невыполнения этого условия, реализовать различные действия.
Сначала реализуем регистрацию проверяемого с исполь- jg зованием функций InputBox и MsgBox.
Проект «Проверка знаний»
1. Разместить на форме кнопку cmdl, задать значение Начать проверку свойства Caption. Создать событийную процедуру cmdl_Click ().
2. С помощью функции InputBox запросить имя и фамилию и присвоить это значение строковой переменной strA, а с помощью функции MsgBox вывести результаты регистрации:
Dim strA As String, bytB As Byte Sub cmdl_Click()
strA = InputBox("Введите ваше имя и фамилию:", "Регистрация")
bytB = MsgBox("Уважаемый " + strA + ", Вы готовы к проверке знаний?", 36, "Конец регистрации") End Sub
3. Запустить проект и щел- EQSZSEHHHHHHI ЯЕ кнуть по кнопке Начать Введите вше имя и фамилию: j q^ j
проверку. ^ | Ha появившейся диалоговой панели Регистра---------
ция ввести в текстовое --------------------------- .„ттшкг---------
поле имя и фамилию.
Вторым аргументом функции MsgBox является числовое значение, которое одновременно задает тип выводимого информационного окна и набор размещенных на нем кнопок.
4. Число 36 обеспечивает [SEZ3BSBBHBMK'~ ~ НЕ вывод информационного 9,
. t i Уеаж«емыи Нцсс»айУгс>»*юеич Выrorost, к просеете анвнда?
окна типа «Вопрос», ко- ^
торое имеет две кнопки I д«. I Ы" I
Да и Нет. '
Щелчок по одной из кнопок приводит к возвращению функцией определенного числового значения (Да — 6, Нет — 7), которое присваивается числовой переменной bytB.
5. С помощью условного оператора можно реализовать либо выход из программы (щелчок по кнопке Нет), либо продолжение работы и переход к проверке знаний (щелчок по кнопке Да):
If bytB = 7 Then End
Вопрос задается с помощью функции InputBox, проверка правильности ответа производится с помощью оператора условного перехода If. . .Then. . .Else, а вывод информации о правильности или неправильности ответа — с помощью функции MsgBox в форме оператора (бесскобочная запись) и с числовым значением второго аргумента 0, что обеспечивает вывод информационного окна с одной кнопкой ОК.
6. Ввести в событийную процедуру программный код, реализующий проверку знаний с помощью последовательности вопросов. В переменной bytN накапливать количество неправильных ответов:
strC = InputBox("Чему равен 1 байт?", "Первый вопрос")
If strC = "8 битов" Then MsgBox "Правильно!", О, "Первый вопрос" _
Else MsgBox "Неправильно!", О, "Первый вопрос": bytN = bytN + 1
strC = InputBox("Переведите десятичное число 5 в двоичную систему счисления:", "Второй вопрос")
If strC = "101" Then MsgBox "Правильно!", 0, "Второй вопрос" _
Else MsgBox "Неправильно!", 0, "Второй вопрос" : bytN = bytN + 1
MsgBox "Уважаемый " + strA + ", Вы сделали " + Str(bytN) + " ошибок!", 0, "Конец опроса"
Запустить проект, прой-
ти регистрацию и отве- i
^ Уважаемый Николай Угриновмч Вы сделали 0 сшибок! !
тить на вопросы. Результат будет выведен с [
помощью панели сооб- -------------------------------------------- 1
щений функции Ms gBox.
Проект хранится в каталоге пг, ОГ4М гг^
\textbook\VB\prjVB8\________ CD-HUM
■J Практические задания «йЗ&ЗР.
4.19. Разработать проект, в котором проводится регистрация (запрашивается имя, отчество и фамилия) и существует возможность изменить регистрационные данные.
4.9.5. Функции даты и времени
Функция Date. Функция Date возвращает значение текущей даты, которое можно присвоить переменным типа Date. Значение даты представляется в виде тройки чисел #Месяц/Число/Год#, разделенных знаком «/». Разностью значений переменных типа Date является число дней между датами.
Создадим проект, позволяющий печатать текущую дату и количество дней, прошедших с начала третьего тысячелетия.
Проект «Дата»
1. Разместить на форме кнопку cmdl и ввести событийную процедуру cmdl_Click () :
Dim dtmA, dtmB As Date
Sub cmdl_Click()
dtmA = Date
dtmB = #1/1/2001*
Print "Сегодня "; dtmA
Print " С начала третьего тысячелетия прошло "; dtmA - dtmB; " дней" End Sub
2. Запустить проект и щел- шзшвннввнпшнмшнш^ кнуть по кнопке Дата, сегодня 31 оз 2002
__ ^ С начала третьего тысячелетня прошло 454 дней
На форме будет напечатано текущее число и ко-
личество дней, прошедших с начала третьего тысячелетия.
Проект хранится в каталоге . «т^р» \textbook\VB\prjVB9\ CP'R0M
Функция Time$. Функция Time$ возвращает значение текущего времени, имеющее тип String, которое можно вывести в текстовое поле. Значение времени представляется в виде тройки чисел #Часы:Минуты:Секунды*, разделенных знаком «:».
Для периодического обновления значения времени используем объект Timer. Объект Timer не отображается на форме в процессе выполнения программы и реализует всего одну функцию — проверяет показания системных часов по событию Timer.
Периодичность события Timer может быть задана с помощью значения свойства Interval, задаваемого в миллисекундах (может изменяться от 0 до 65535). Для того чтобы событие Timer происходило каждую секунду, необходимо свойству Interval присвоить значение 1000.
Дета |
Создадим проект, выводящий текущее время в текстовое поле каждую секунду.
Проект «Секундомер»
1. Разместить на форме объект Timer и присвоить ему имя tmrl, а свойству Interval — значение 1000. Поместить на форму текстовое поле txtTime. Ввести событийную процедуру tmrl_Timer () :
Sub tmrl_Timer() txtTime.Text = Time$ End Sub
CD-ROM 1Щ3 |
2. Запустить проект. В текстовое окно с интервалом в одну секунду будет выводиться системное время компьютера.
Проект хранится в каталоге \textbook\VB\prj VB10\
Практические задания
4.20. Разработать проект, который позволяет определить количество дней, прошедших со дня вашего рождения.
4.21. Разработать проект, который выводит в текстовые поля текущие дату и время.
4.10. Графические возможности языка Visual Basic
На формах (Form) или в графических окнах (Picture- Box) можно рисовать различные графические примитивы с использованием графических методов:
Scale — позволяет задать систему координат и масштаб для формы или графического окна:
object.Scale (XI,Yl) - (X2,Y2)
Аргументами метода являются XI, Yl — координаты левого верхнего угла объекта и Х2, Y2 — координаты правого нижнего угла объекта.
Pset — установка точки с заданными координатами и цветом:
object.Pset (X,Y) [,color]
Аргументами метода являются X, Y — координаты точки и color — цвет линии. Значение аргумента color можно задать различными способами:
• с помощью одной из восьми констант, определяющих цвет (vbBlack — черный, vbBlue — синий, vbGreen — зеленый, vbCyan — голубой, vbRed — красный, vbMagenta — сиреневый, vbYellow — желтый, vbWhite — белый);
• с помощью функции QBColor (number), аргументом которой являются числа от 0 до 15, а результат сотоветству- ет одному из основных 16 цветов;
• с помощью функции RGB (bytRed, bytGreen, bytBlue), аргументами которой являются три числа в диапазоне от О до 255 (интенсивности базовых цветов), а результатом — число типа Long в диапазоне от 0 до 2563 - 1 (16 777 215). Таким образом, определяется цветовая палитра с более чем 16 миллионами цветов, а каждый цвет задается числом, которое вычисляется по формуле bytRed + 256 • bytGreen + 2562 • bytBlue.
В случае отсутствия аргумента color рисование будет производиться цветом, принятым по умолчанию (черным).
Line — рисование линии, прямоугольника или закрашенного прямоугольника заданного цвета:
object.Line (XI,Yl) - (X2,Y2) [,color][,В][F]
Аргументами метода являются XI, Yl и X2,Y2 — координаты концов линии (левого верхнего и правого нижнего угла прямоугольника), color — цвет линии. Флажок В задает рисование прямоугольника, а флажок F — его закрашивание.
Circle - рисование окружности, овала или дуги с заданными координатами центра, радиусом, цветом, начальным и конечным углами дуги и коэффициентом сжатия:
object.Circle (X,Y),radius [,color, start, end, aspect]
Аргументами метода являются X, Y — координаты центра окружности, radius — радиус окружности, color — цвет окружности, start и end — начальный и конечный угол дуги, aspect — коэффициент сжатия.
Если графический метод применяется к объекту «форма» (Form), то при его записи имя объекта object можно опускать.
Разработаем проект построения в графическом окне графика функции с использованием графических методов. В качестве примера рассмотрим построение графика функции у = sin*.
Проект «Построение графика функции»
1. Разместить на форме графическое поле picGraph, в щ-д котором будет производиться построение графика.
Для большей понятности программного кода будем вводить в него комментарии, которые начинаются с символа апостроф « 1 ».
2. Разместить на форме кнопку cmdl и создать событийную процедуру построения графика, в которой устанавливается масштаб, в цикле осуществляется построение графика функции, рисуются оси координат и печатаются на них числовые шкалы:
Dim sngX As Single, inti As Integer
Sub cmdl_Click() 'Задание масштаба picGraph.Scale (-10, 2)-(10, -2) 'Построение графика For sngX = -10 To 10 Step 0.01 picGraph.PSet (sngX, Sin(sngX)) Next sngX 'Ось X
picGraph.Line (-10, 0)- (10, 0) For inti = -10 To 10 picGraph.PSet (inti, 0) picGraph.Print inti Next inti 'Ось Y
picGraph.Line (0, 2)-(0, -2) For inti = -2 To 2 picGraph.PSet (0, inti) picGraph.Print inti Next inti End Sub
3. Запустить проект и щелкнуть по кнопке График.
Проект хранится в каталоге \textbook\VB\prjVB 11\
Анимация. Для создания анимации (иллюзии движения на экране какого-либо объекта) применяется принцип смены кадров (изображений), как это делается в мультипликации. Программа, имитирующая движение, должна реализо- вывать следующие этапы:
• создание изображения на экране;
• реализация временной паузы для того, чтобы глаз зафиксировал изображение;
• проведение коррекции изображения.
Анимация часто используется для изображения движения объектов. Для регулирования скорости движения объекта используют пустой цикл: чем большее количество раз он будет выполняться, тем медленнее будет двигаться объект.
JPj Проект «Движение круга»
1. Разместить на форме графическое поле picAnim, в котором будет производиться движение круга.
Движение по оси ОХ реализуем в цикле. Эффект анимации получим рисованием сначала круга синего цвета, а затем его стиранием кругом цвета фона (белым). Для получения закрашенного круга требуется установить значение свойства FillColor (при рисовании vbBlue, а при стирании vbWhite), которое определяет цвет заполнения рисуемой фигуры. Для свойства FillStyle, которое задает тип закраски (прозрачный — Transparent или непрозрачный — Solid) установить значение Solid.
Скорость движения круга (скорость смены одного изображения другим) можно регулировать с помощью изменения количества повторений пустого цикла между рисованием и стиранием.
2. Поместить на форму кнопку cmdStart и создать событийную процедуру, реализующую анимацию:
Dim mtX As Integer, lngl As Long Private Sub cmdStart_Click() 'Масштаб
picAnim.Scale (-10, 10)-(10, -10) 'Анимация
For intX = -10 To 10 'Рисование
CD-ROM ЦЗГ |
picAnim.FillColor = vbBlue picAnim. Circle (mtX, О) , 1, vbBlue
'Задержка стирания For lngl = 1 То 10000000 Next lngl 'Стирание
picAnim.FillColor = vbWhite picAnim.Circle (intX, 0), 1, vbWhite Next intX End Sub 3. Запустить проект и щелкнуть по кнопке Cmapm. В графическом поле начнется движение синего круга по оси ОХ.
Проект хранится в каталоге гп ппм \textbook\VB\prjVB12\ ии-ким
Практические задания
4.22. Разработать проект «Графический редактор», который позволяет нарисовать в графическом поле все графические примитивы (точку, линию, прямоугольник, закрашенный прямоугольник, окружность).
4.23. Создать проект, позволяющий задавать цвета различными способами (с помощью цветовых констант, функции QBColor и функции RGB) и демонстрирующий заданный цвет.
4.24. Изменить проект «Построение графика функции» так, чтобы дополнительно строились графики линейной, квадратичной и кубической функций.
4.11. Общие процедуры. Область видимости процедур
При разработке сложного алгоритма целесообразно стараться выделить в нем последовательности действий, которые выполняют решение каких-либо подзадач и могут многократно вызываться из основного алгоритма. Такие алгоритмы называются вспомогательными и в процедурных языках программирования реализуются в форме подпрограмм, которые вызываются из основной программы.
В объектно-ориентированных языках программирования вспомогательные алгоритмы реализуются с помощью общих процедур. Общие процедуры создаются в тех случаях, когда в программном модуле можно выделить многократно повторяющиеся последовательности действий (алгоритмы).
Определение общей процедуры. Каждой общей процедуре дается уникальное название - имя процедуры и устанавливается список входных и выходных параметров процедуры.
Список входных параметров представляет собой набор переменных, значение которых должно быть установлено до начала выполнения процедуры.
Список выходных параметров представляет собой набор переменных, значение которых должно быть установлено после окончания выполнения процедуры. Синтаксис общей процедуры: Sub ИмяПроцедуры(СписокПараметров) программный код End Sub
у |
Вызов общей процедуры. Запуск общих процедур не связывается с какими-либо событиями, а реализуется путем вызова из других процедур.
Общая процедура представляет собой подпрограмму, которая начинает выполняться после ее вызова из другой процедуры.
Общая процедура вызывается на выполнение либо с помощью оператора Call, либо по имени. В случае вызова процедуры с использованием оператора Call список параметров заключается в скобки:
Call ИмяПроцедуры(СписокПараметров)
В случае вызова процедуры по имени список параметров приводится без скобок:
p^/liit ИмяПроцедуры СписокПараметров
I* -- ---------- - ■ —
Размещение общей процедуры в проекте. Общая процедура может входить в состав программного модуля одной из форм проекта (в файл с расширением frm). Общая процедура может быть также размещена в стандартном программном модуле (файле с расширением bas).
Область видимости процедуры. Общие и событийные процедуры могут быть локальными и глобальными. Локальная процедура доступна только внутри данного программного модуля и не может быть вызвана из другого модуля. Например, локальная общая процедура, размещенная в программном модуле некоторой формы, не может быть вызвана из программного модуля другой формы. Локальная процедура задается с помощью ключевого слова Private:
Private Sub ИмяПроцедуры программный код End Sub
Глобальные процедуры доступны, то есть могут быть вызваны, из всех программных модулей проекта. Глобальная процедура задается с помощью ключевого слова Public (по умолчанию, если перед ключевым словом Sub отсутствуют ключевые слова, процедура является глобальной): Public Sub ИмяПроцедуры программный код End Sub
Область видимости переменной. Переменные также могут быть локальными и глобальными (открытыми). Локальная переменная доступна только внутри процедуры или программного модуля и к ней невозможно обращение из другой процедуры или модуля. Локальная переменная определяется с помощью ключевого слова Dim.
Если переменная определена перед процедурой, то она может быть вызвана только в этой процедуре; если она определена перед программным модулем в области (Gene- ral)(Declaration) программного кода, то она может быть вызвана только в этом модуле.
К глобальным переменным может быть произведено обращение из всех программных модулей проекта. Глобальная переменная определяется с помощью ключевого слова Global в области (General)(Declaration) программного кода.
Создадим проект, который наглядно продемонстрирует (с использованием графических методов) возможности использования общих процедур.
Пусть проект будет включать три формы. На первую форму должен выводиться рисунок простейшего домика, который будет состоять из стены (прямоугольник) и крыши (треугольник). На второй и третьей форме должны рисоваться несколько домиков различных размеров.
Программный модуль, реализующий рисование домика на первой форме, будет состоять из двух событийных процедур. Систему координат и масштаб зададим с помощью метода Scale, а для рисования стены и крыши будем использовать графический метод Line.
JE| Проект «Рисование домика»
1. Разместить на форме frml две командные кнопки стс1Стена и стсЖрыша и создать для них событийные процедуры рисования стены и крыши:
Private Sub cmdCTeHa_Click() Scale (О, 170)-(350, 0) frml.Line (20, 100)-(220, 20), , ВEnd Sub
Private Sub cmdKpbima_Click () Scale (0, 170)-(350, 0) frml.Line (20, 100)-(220, 100) frml.Line (20, 100)-(120, 150) frml.Line (120, 150)- (220, 100) End Sub
Теперь необходимо нарисовать несколько домиков различного размера на второй форме. Если использовать событийные процедуры, то для каждого домика нужно будет создава<