Функции в языке Visual Basic

Понятие функции в языке программирования близко к понятию функции в математике. Функция может иметь один или более аргументов. При записи функции несколь­ких аргументов аргументы в списке отделяются друг от дру­га запятыми:

ИмяФункции(СписокАргументов)

Для каждого набора аргументов можно определить значе­ние функции. В программировании говорят, что функция возвращает свое значение, если заданы значения ее аргу­ментов. Функции обычно входят в состав выражений, значе­ния которых присваиваются переменным.

Функции могут быть различных типов: преобразования типов данных, математические, строковые, финансовые, даты и др. Тип функции определяется возможными значе­ниями аргументов и функции.

4.9.1. Функции преобразования типов данных

Функции в языке Visual Basic - student2.ru
3 j
Функции в языке Visual Basic - student2.ru

Функции преобразования реализуют преобразование дан­ных из одного типа в другой.

Функция 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.

Функции в языке Visual Basic - student2.ru

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 (), реа­лизующую перевод чисел из десятичной системы в восьме­ричную.

Функции в языке Visual Basic - student2.ru

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)

Функции в языке Visual Basic - student2.ru 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\

Функции в языке Visual Basic - student2.ru
Практические задания

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.

Функции в языке Visual Basic - student2.ru
Практические задания

4.17. Разработать проект, позволяющий вычислить гипотенузу и пло­щадь прямоугольного треугольника, если известны его катеты.

4.9.3. Строковые функции

В строковых функциях строками являются либо аргу­менты, либо возвращаемые функциями значения.

Функции в языке Visual Basic - student2.ru

Функция определения длины строки. В функции опреде­ления длины строки Len (Строка$) аргументом является строка Строка$, а возвращает функция числовое значение длины строки (количество символов в строке). Синтаксис функции:

Len(Строка$)

Пусть аргументом функции Len будет строка "информа­тика", тогда значением целочисленной переменной

Функции в языке Visual Basic - student2.ru 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.

Функции в языке Visual Basic - student2.ru

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
Функции в языке Visual Basic - student2.ru

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, определяющие вид панели сообщений
ЧисКод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

Функции в языке Visual Basic - student2.ru 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 'Стирание

Функции в языке Visual Basic - student2.ru

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

у

Вызов общей процедуры. Запуск общих процедур не свя­зывается с какими-либо событиями, а реализуется путем вызова из других процедур.

Функции в языке Visual Basic - student2.ru

Общая процедура представляет собой подпрог­рамму, которая начинает выполняться после ее вызова из другой процедуры.

Общая процедура вызывается на выполнение либо с по­мощью оператора Call, либо по имени. В случае вызова процедуры с использованием оператора Call список пара­метров заключается в скобки:

Call ИмяПроцедуры(СписокПараметров)

В случае вызова процедуры по имени список параметров приводится без скобок:

p^/liit ИмяПроцедуры СписокПараметров

I* -- ---------- - ■ —

Размещение общей процедуры в проекте. Общая проце­дура может входить в состав программного модуля одной из форм проекта (в файл с расширением frm). Общая процедура может быть также размещена в стандартном программном модуле (файле с расширением bas).

Область видимости процедуры. Общие и событийные про­цедуры могут быть локальными и глобальными. Локальная процедура доступна только внутри данного программного модуля и не может быть вызвана из другого модуля. Напри­мер, локальная общая процедура, размещенная в програм­мном модуле некоторой формы, не может быть вызвана из программного модуля другой формы. Локальная процедура задается с помощью ключевого слова Private:

Private Sub ИмяПроцедуры программный код End Sub

Глобальные процедуры доступны, то есть могут быть вы­званы, из всех программных модулей проекта. Глобальная процедура задается с помощью ключевого слова Public (по умолчанию, если перед ключевым словом Sub отсутствуют ключевые слова, процедура является глобальной): Public Sub ИмяПроцедуры программный код End Sub

Область видимости переменной. Переменные также могут быть локальными и глобальными (открытыми). Локальная переменная доступна только внутри процедуры или програм­много модуля и к ней невозможно обращение из другой про­цедуры или модуля. Локальная переменная определяется с помощью ключевого слова Dim.

Если переменная определена перед процедурой, то она может быть вызвана только в этой процедуре; если она определена перед программным модулем в области (Gene- ral)(Declaration) программного кода, то она может быть вы­звана только в этом модуле.

К глобальным переменным может быть произведено обра­щение из всех программных модулей проекта. Глобальная переменная определяется с помощью ключевого слова Glo­bal в области (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

Теперь необходимо нарисовать несколько домиков раз­личного размера на второй форме. Если использовать собы­тийные процедуры, то для каждого домика нужно будет со­здава<

Наши рекомендации