Задание 86: Дополните ваш фотоальбом процедурой пользователя, которая перед показом очередной фотографии воспроизводит один и тот же музыкальный звук, например, "c: \Windows\Media\Chimes.wav".
Операторы Stор,
End и Exit Sub
До сих пор мы писали процедуры, которые выполняли свою работу до конца и заканчивали ее только на операторе End Sub, не раньше. Существуют ли операторы, которые подобно операторам выхода из цикла Exit Do и Exit For заставляют компьютер покинуть процедуру, не доходя до ее конца? Такие операторы существуют.
Оператор End заставляет Visual Basic завершить работу не только процедуры, а всего проекта, не доходя до конечного End Sub. Пример: программа
Private Sub Command1_Click()
Print 1;: Print 2;: End: Print 3;
End Sub
напечатает 1 2. Правда, заметить это вы успеете только в пошаговом режиме, так как End завершает режим работы и проект мгновенно переходит в режим проектирования.
Ненавистник пошагового режима мог бы мечтать: "Хорошо бы существовал специальный оператор паузы, чтобы наткнувшись на него, компьютер приостанавливал выполнение программы, а мы могли бы спокойно посмотреть на результаты и подумать". Такой оператор есть, это Stop. Наткнувшись на него, компьютер переходит в режим прерывания и делает паузу до тех пор, пока вы снова не щелкните на кнопке Start. Тогда он продолжает работу с того места, где остановился. Вот вариант программы, при котором вы успеваете разглядеть результат:
Private Sub Command1_Click()
Print 1;: Print 2;: Stop: End: Print 3;
End Sub
Еще пример: программа
Private Sub Command1_Click()
Print 2;: A: Print 3;: End: Print 4;
End Sub
Private Sub A()
Print 6;: End: Print 7; End Sub
напечатает 2 6.
Оператор Exit Sub не такой решительный, как End. Он не выбрасывает Visual Basic из режима работы, а просто заставляет компьютер выйти из процедуры, в которой он выполнился. Если он выполнился в вызываемой процедуре, то Visual Basic возвращается в процедуру, ее вызвавшую. Если он выполнился в процедуре обработки события, то Visual Basic просто завершает работу этой процедуры.
Пример: Заменим в предыдущей программе оба End на Exit Sub:
Private Sub Command1_Click()
Print 2;: A: Print 3;: Exit Sub: Print 4;
End Sub
Private Sub A()
Print 6;: Exit Sub: Print 7;
End Sub
Эта программа напечатает 2 6 3.
Задание 87: Вот вам программа с процедурами. Вам нужно, не запуская ее, записать на бумажке весь разговор, который ведут герои "Трех мушкетеров".
Private Sub Command1_Click()
Print "Я, король Франции, спрашиваю вас — кто вы такие? Вот ты — кто такой? "
ATOS
Print "А ты, толстяк, кто такой?"
PORTOS
Print "А ты что отмалчиваешься, усатый?"
DARTANIAN
Print "Анна! Иди-ка сюда!!!"
Exit Sub
Print "Аудиенция закончена, прощайте!"
End Sub
Private Sub ATOS()
Print "Я — Atoc"
End Sub
Private Sub ARAMIS()
Print "Это так же верно, как то, что я — Арамис!"
End Sub
Private Sub PORTOS()
Print "А я Портос! Я правильно говорю, Арамис?"
ARAMIS
Print "Он не врет, ваше величество! Я Портос, а он Арамис."
End Sub
Private Sub DARTANIAN()
Print "А я все думаю, ваше величество — куда девались подвески королевы?"
Exit Sub
Print "Интересно, что ответит король?"
PORTOS
End Sub
Сверьте с ответом. Если не сходится, запустите программу в пошаговом режиме.
Теперь вы достаточно знаете о процедурах, чтобы они стали для вас удобными кирпичиками для постройки программ. Более мощным средством являются процедуры с параметрами, о которых вы сейчас узнаете.
Задание 88: В программе для задания 60 из 0 о продавце автомобилей есть два повторяющихся фрагмента. Сам бог велел сделать их процедурами.
Задание 89: Аналогичную вещь можно проделать для калькулятора
Переменные вместо чисел
Наша цель — процедуры с параметрами. Данный раздел — подготовка к взятию этой крепости.
Вернемся к задаче из о фотоальбоме со значками. Вспомним, что мы написали процедуру пользователя для рисования значка. Вот она:
Private Sub Рисуем_мой_значок()
Picture1.Line (100, 100)-(300, 300), vbBlue, В
Picture1.Line (100, 100)-(300, 300), vbBlue
Picture1.Line (100, 300)-(300, 100), vbBlue
End Sub
Значок рисуется в левом верхнем углу фото с отступом в 100 твипов как от левого края фото, так и от верхнего. Предположим, вам разонравился такой отступ и вы решили сделать его поменьше, скажем, 50. Вам нужно в программе в 6 местах поменять число 100 на 50. Вот то-то и неудобно, что в 6, а не в одном. Слишком много труда. В нашей программе это, конечно, пустяк, а вот в больших и сложных программах одна и та же величина может встречаться сотни раз, и чтобы ее изменить, придется вносить сотни исправлений.