Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Зачем нужны процедуры пользователяСодержание книги
Поиск на нашем сайте
Задача: Вы записали на диск десяток фотографий, снятых во время каникул, и решили сделать фотоальбом. Поместили на форму десяток кнопок с названиями фотографий и один PictureBox. При нажатии на кнопку нужное фото для всеобщего обозрения загружается в PictureBox, а также печатается дата снимка. Задача легкая, мы ее уже решали в 9.3. Вот программа для 4 фотографий: Private Sub Command1_Click() Picture1.Picture = LoadPicture("c:\temp\Rockies.bmp") Picture1.Print, "21.07.2001" End Sub
Private Sub Command2_Click() Picture1.Picture = LoadPicture("c:\temp\Porthole.bmp") Picture1.Print, "28.07.2001" End Sub
Private Sub Command3_Click() Picture1.Picture = LoadPicture("c:\temp\Balloons.bmp") Picture1.Print, "12.08.2001" End Sub
Private Sub Command4_Click() Picture1.Picture = LoadPicture("c:\temp\Guitar.bmp") Picture1.Print, "20.07.2001" End Sub Хочу предупредить, что эта программа, постепенно усложняясь, пройдет через всю главу, поэтому разберитесь в ней как следует, иначе важный материал главы будет вам непонятен.
Усложним задачу: Некоторые из фотографий сняли вы, некоторые - ваш друг. Вы хотите, чтобы в знак этого на ваших фото в левом верхнем углу появлялся один значок, а на фото вашего друга другой. Ваш любимый значок такой: а у вашего друга такой: Пусть они и появляются. Давайте значки будем рисовать при помощи методов. Ваша программа станет такой: Private Sub Command1_Click() Picture1.Picture = LoadPicture("c:\temp\Rockies.bmp") 'Это ваше фото, рисуем значок: Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue Picture1.Print, "21.07.2001" End Sub
Private Sub Command2_Click() Picture1.Picture = LoadPicture("c:\temp\Porthole.bmp") 'Это ваше фото, рисуем значок: Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue Picture1.Print, "28.07.2001" End Sub
Private Sub Command3_Click() Picture1.Picture = LoadPicture("c:\temp\Balloons.bmp") 'Это фото вашего друга, рисуем значок: Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 Picture1.Print, "12.08.2001" End Sub
Private Sub Command4_Click() Picture1.Picture = LoadPicture("c:\temp\Guitar.bmp") 'Это фото вашего друга, рисуем значок: Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 Picture1.Print, "20.07.2001" End Sub Программа работает нормально, но невооруженным глазом виден ее существенный недостаток - резко возросший объем. Недостаток этот особенно будет заметен, когда число фото вырастет до десятка. Это тем более обидно, что в программе есть два повторяющихся фрагмента. Это фрагмент 'Это ваше фото, рисуем значок: Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue и фрагмент 'Это фото вашего друга, рисуем значок: Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 которые в нашей программе встретились по два раза, а когда число фото вырастет, то встретятся многократно. В этом случае программисты всего мира поступают так. Они придумывают повторяющимся фрагментам имена, например, Рисуем_мой_значок и Рисуем_значок_друга Затем они вписывают в программу специальную процедуру для каждого фрагмента с придуманным только-что именем, после чего имеют право во всей программе вместо фрагмента писать его имя. Чтобы вам было понятно, посмотрите на получившуюся программу: Private Sub Рисуем_мой_значок() 'Это одна специальная процедура Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue End Sub
Private Sub Рисуем_значок_друга() 'Это другая специальная процедура Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 End Sub 'Это новый текст программы: Private Sub Command1_Click() Picture1.Picture = LoadPicture("c:\temp\Rockies.bmp") Рисуем_мой_значок Picture1.Print, "21.07.2001" End Sub
Private Sub Command2_Click() Picture1.Picture = LoadPicture("c:\temp\Porthole.bmp") Рисуем_мой_значок Picture1.Print, "28.07.2001" End Sub
Private Sub Command3_Click() Picture1.Picture = LoadPicture("c:\temp\Balloons.bmp") Рисуем_значок_друга Picture1.Print, "12.08.2001" End Sub
Private Sub Command4_Click() Picture1.Picture = LoadPicture("c:\temp\Guitar.bmp") Рисуем_значок_друга Picture1.Print, "20.07.2001" End Sub Пояснение того же самого другими словами: У нас добавилось две процедуры. Каждая из этих процедур представляет собой цепочку операторов, из которых состоит упомянутый фрагмент. Сверху цепочки вы пишете заголовок процедуры (Private Sub…), а снизу - конечную строчку процедуры (End Sub). Все операторы, из которых состоит процедура, кроме заголовка и конечной строки, будем называть телом процедуры. Как только эти процедуры написаны, компьютер "узнает", что такое Рисуем_мой_значок и Рисуем_значок_друга. Поэтому в остальных процедурах слова Рисуем_мой_значок и Рисуем_значок_друга используются, как настоящие операторы, и выполняются, как настоящие операторы. Суть их выполнения в том, что когда Visual Basic во время выполнения программы натыкается на оператор Рисуем_мой_значок, он ищет в программе процедуру с именем Рисуем_мой_значок и выполняет тело этой процедуры, после чего возвращается к выполнению программы. Этот процесс называется вызовом процедурыили обращением к процедуре. Обязательно выполните эту программу в пошаговом режиме! Обязательно обратите внимание, что после выполнения тела вызываемой процедуры (Рисуем_мой_значок) компьютер возвращается в вызывающую процедуру (Command1_Click) к выполнению оператора, следующего за оператором Рисуем_мой_значок (в нашем случае это оператор Print). Две дописанные нами процедуры называются процедурами пользователя, в отличие от привычных нам процедур обработки событий. Их коренное отличие от последних в том, что вызываются они не наступлением каких-то событий, а упоминанием их имени в других процедурах. Процедуры пользователя и являются "процедурами типа "Как"". Вы можете сами посчитать, насколько новая программа будет короче старой при десяти фотографиях.
Есть еще один способ обратиться к процедуре. Вместо оператора Рисуем_мой_значок можно написать оператор Call Рисуем_мой_значок Смысл их совершенно одинаков. Вторым способом часто пользовались раньше. С английского слово "Call" переводится "Вызов". Взаимодействие процедур в программе Вызываемая процедура сама в процессе своей работы может вызвать какую-нибудь другую процедуру. И так далее. Потренируемся: Определите без компьютера, что напечатает программа: Private Sub Command1_Click() Print 1;: A: Print 2;: B: Print 3; End Sub
Private Sub A() Print 4; End Sub
Private Sub B() Print 5;: C: Print 6; End Sub
Private Sub C() Print 7; End Sub Работать программа начинает по щелчку по кнопке Command1. Вряд ли вам с непривычки удасться дать правильный ответ. Тогда непременно программу - в компьютер и пошаговый режим. Желтая полоска будет скакать по программе туда-сюда. Перед каждым нажатием на F8 вы обязаны предсказать, куда она прыгнет! Не сможете - нет смысла читать книгу дальше. Ответ: 1 4 2 5 7 6 3
Начинающим программистам не хочется писать процедуры пользователя, как не хочется им писать длинные имена и соблюдать отступы от левого края окна кода. "Ну и лопухи же эти профессиональные программисты, что осложняют себе жизнь этой морокой!" - думают они - "Наши программы отлично работают и безо всего этого". Верно, работают. Потому что программы коротенькие. Когда они станут длинными и напоминающими винегрет, все такие подрастающие программисты дружно зарыдают: "Мамочка, почему ты нас в детстве не научила слушаться взрослых?!" Запомните еще одно хорошее правило: Размеры любой процедуры не должны превышать одного экрана монитора. Если превышают, то даже если в ней нет повторяющихся фрагментов, все равно разбейте ее по смыслу на два-три фрагмента и каждый сделайте процедурой. Ваша программа будет гораздо легче читаться.
Задание 86: Дополните ваш фотоальбом процедурой пользователя, которая перед показом очередной фотографии воспроизводит один и тот же музыкальный звук, например, "c:\Windows\Media\Chimes.wav".
|
||||||||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 185; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.122.69 (0.01 с.) |