Кроме перечисленных выше констант существует еще большое число так называемых внутренних констант Visual Basic. Объявлять их не надо, ими можно сразу пользоваться, если знать их имена и смысл. Например, такими константами являются названия цветов — vbRed, vbBlack и т. п. Каждая из таких констант имеет конкретное численное значение (например, vbRed=255), но названия запоминаются легче, чем числа. Имена, смысл и значение внутренних констант вы найдете в Object Browser.
Процедуры с параметрами
Процедуры с параметрами — мощный инструмент программирования и применяется программистами очень широко.
Вообразите, что вы решили фотографии разного с вашей точки зрения качества помечать значками разного отступа, размера и цвета, чтобы по значку легко было догадаться о качестве. Вот ваши предпочтения:
Но как это сделать? Ведь в процедуре Рисуем_мой_значок каждой из этих переменных присвоено одно единственное значение, поэтому, какую бы фотографию ни взять, значок всегда будет одинаковый. Можно было бы написать отдельную процедуру для каждого значка, но делать этого не хочется, потому что процедуры эти будут почти одинаковы. А тогда где экономия?
Выход есть. Заметим, что присваивать значения переменным не обязательно внутри процедуры Рисуем_мой_значок. Вот вариант программы, который будет работать:
Dim Otstup As Integer
Dim Razmer As Integer
Dim Tsvet As Long
Private Sub Рисуем_мой_значок()
Picture1.Line (Otstup, Otstup)-(Otstup + Razmer, Otstup + Razmer), Tsvet, В
Picture1.Line (Otstup, Otstup)-(Otstup + Razmer, Otstup + Razmer), Tsvet
Picture1.Line (Otstup, Otstup + Razmer)-(Otstup + Razmer, Otstup), Tsvet
End Sub
Private Sub Command1_Click()
Picture1.Picture = LoadPicture("c: \temp\Rockies.bmp")
'Фото неважное
Otstup = 100
Razmer = 200
Tsvet = vbBlue
'Рисуем_мой_значок
Picture1.Print, "21.07.2001"
End Sub
Private Sub Command2_Click()
Picture1.Picture = LoadPicture("c: \temp\Porthole.bmp")
'Фото хорошее Otstup = 200 Razmer = 400
Tsvet = RGB(100, 250, 150)
'Рисуем_мой_значок
Picture1.Print, "28.07.2001"
End Sub
Как видите, в процедуре Рисуем_мой_значок значения переменным не присваиваются, а присваиваются в процедурах, которые ее вызывают, причем присваиваются непосредственно перед вызовом. Убедитесь в пошаговом режиме, что все работает нормально.
Нормально-то нормально, да вот опять наша программа начала разбухать — в каждой вызывающей процедуре добавилось по три лишних строчки. За красивую жизнь приходится платить. Но и тут создатели языков программирования идут навстречу программистам. Имеется возможность вместо
Otstup = 100
Razmer = 200
Tsvet = vbBlue
Рисуем_мой_значок писать
Рисуем_мой_значок 100, 200, vbBlue
Все так и делают. Значения, идущие после имени процедуры через запятую, называются параметрами процедуры. Но откуда компьютер знает, что, например, Otstup = 100 и Razmer = 200, а не наоборот — Otstup = 200 и Razmer = 100? Компьютеру это объясняют в заголовке процедуры Рисуем_мой_значок, который теперь пишется по-другому:
Private Sub Рисуем_мой_значок (Otstup As Integer, Razmer As Integer,
Tsvet As Long)
Как видите, здесь задаются и порядок параметров и их тип.
Вот как компактно теперь выглядит наша программа. Это и есть ее окончательный вид, к которому мы стремились на протяжении этой главы:
Private Sub Рисуем мой значок (Otstup As Integer, Razmer As Integer, Tsvet As Long)
Picture1.Line (Otstup, Otstup)-(Otstup + Razmer, Otstup + Razmer), Tsvet, В
Picture1.Line (Otstup, Otstup)-(Otstup + Razmer, Otstup + Razmer), Tsvet
Picture1.Line (Otstup, Otstup + Razmer)-(Otstup + Razmer, Otstup), Tsvet
End Sub
Private Sub Command1_Click()
Picture1.Picture = LoadPicture("c: \temp\Rockies.bmp")
Рисуем_мой_значок 100, 200, vbBlue
Picture1.Print, "21.07.2001"
End Sub
Private Sub Command2_Click()
Picture1.Picture = LoadPicture("c: \temp\Porthole.bmp")
Рисуем_мой_значок 200, 400, RGB(100, 250, 150)
Picture1.Print, "28.07.2001"
End Sub
Обратите внимание, что мы убрали за ненадобностью фрагмент объявлений:
Dim Otstup As Integer
Dim Razmer As Integer
Dim Tsvet As Long
так как эти переменные уже объявлены в заголовке процедуры.
Наткнувшись в процессе выполнения программы на обращение к процедуре (Рисуем_мой_значок 100, 200, vbBlue), Visual Basic присваивает параметрам, приведенным в заголовке процедуры (Otstup, Razmer, Tsvet), указанные значения, а затем выполняет тело процедуры.
В качестве значений параметров в обращениях к процедурам можно писать не только константы, но и переменные, и выражения. Например, вместо Рисуем_мой_значок 100, 200, vbBlue можно было написать а=100
Рисуем_мой_значок а, 2 * a, vbBlue