Будь умным!


У вас вопросы?
У нас ответы:) SamZan.ru

таки прелесть этот Visul Bsic Впечатление такое будто у вас в руках волшебная палочка

Работа добавлена на сайт samzan.ru: 2016-06-20


С.Н.Лукин

для начинающих

Все права защищены 

©

______________________________________________________________________

2001


Содержание


  1.  Предисловие

Какая все-таки прелесть этот Visual Basic! Впечатление такое, будто у вас в руках волшебная палочка. Легкий взмах – и программа готова: вы видите на экране собственный калькулятор или систему управления базами данных, или мультфильм…. Или вот, например: Мрачная городская улица. Появляется автомобиль. Он стремительно приближается к главному герою, спрятавшемуся с бластером в руках за рекламной тумбой. Из автомобиля доносятся выстрелы. Пули щелкают по тумбе. В последний момент – визг тормозов, и машина застывает. Теперь не медли – бей по клавишам клавиатуры, стреляй, пока крестные отцы наркомафии до тебя не добрались! Автомобиль вспыхивает, из него выскакивают “братки” и, спасаясь от твоих выстрелов, бросаются в ближайшие укрытия, откуда открывают ожесточенный огонь. Схватка продолжается… После изучения этой книжки вы безусловно будете способны создать на Visual Basic двумерную версию такой игры.

Конечно, взмах волшебной палочкой – всего лишь первое впечатление. Да и неинтересно "палкой махать" вместо того, чтобы самому программировать. Но факт остается фактом – с появлением Visual Basic программировать стало гораздо легче и приятней, чем раньше. И программы можно делать гораздо более мощные. Раньше начинающий программист и помыслить не мог о том, чтобы запрограммировать игру со сложным поведением нескольких персонажей, подобную той, что я только что описал. С появлением Visual Basic это стало возможно.

Visual Basic принадлежит к разряду новых и замечательных инструментов программирования, а именно – к средам визуальной разработки программ, к которым принадлежат также Delphi (в основе которой лежит современная версия языка Паскаль – Object Pascal),   Visual C++ и некоторые другие. Отличие сред визуальной разработки от более ранних инструментов программирования состоит в том, что они вместо программиста “пишут” наиболее часто встречающиеся и скучные части программы, освобождая его таким образом для интересного и творческого труда. Иногда, если задача простая, случается, что компьютер создает всю программу полностью. Еще одна особенность – программисту, работающему в Visual Basic и других подобных средах, никуда не деться от так называемого объектного программирования, завоевавшего в последние годы программистский мир.

  1.  Кому предназначена эта книга?

Это самоучитель. То есть написана книга с расчетом на то, что, изучив ее без посторонней помощи, вы сможете без посторонней помощи составлять программы на Visual Basic и выполнять их на компьютере тоже без посторонней помощи. Автор приложил специальные усилия для того, чтобы изложение было понятным. Все объясняется на примерах. Рассмотрение почти каждой темы заканчивается задачами на составление программы (всего таких задач – 132). Подавляющее большинство задач снабжено ответами, так что читатель может эффективно контролировать усвоение материала.

Если вы хотите научиться программировать, но никогда в жизни не написали ни одной программы и плохо представляете, как компьютер устроен, читайте эту книгу с начала до конца – вы и программировать научитесь, и об устройстве компьютера узнаете все необходимое. Я хочу, чтобы прочтя книгу и решив все задачи, вы могли с удовлетворением сказать себе – Да, я научился программировать, я – программист!

Если вам интересно программировать игры, то знайте, что моя книга именно на это и ориентирована. Изучив ее, вы будете вполне готовы к созданию собственных игр типа морского боя, крестиков-ноликов, танковой битвы (где множество танков движутся по квадратному полю), стрелялок или той хотя бы, что я описал выше. Впрочем, подробнее об играх – ниже, в .

Предположим, что вы школьник или студент, первый год изучающий программирование на Visual Basic, и вам предстоит сдавать по нему экзамен. Вы чувствуете, что вы «на нуле» и НИЧЕГО НЕ ПОНИМАЕТЕ и даже не знаете, с чего начать. В этом случае, изучив книгу и выполнив приведенные в ней задания, вы будете прочно знать основы Visual Basic. Достаточно ли этого?. Ведь Visual Basic – это богатая новогодняя елка, на которой великое множество игрушек. В моей книге рассказано все, что нужно для новичка: про ствол и главные ветви елки, про то, как игрушки крепятся к веткам, рассмотрены самые интересные игрушки. Однако, где гарантия, что ваш преподаватель не предпочитает другие? Может быть, взять книгу потолще? Уверяю вас, если вы возьмете любую самую толстую книгу по Visual Basic, то и там наверняка не найдете всего, что от вас требуется. Игрушек в Visual Basic слишком много даже для трехтомника. Поэтому сначала изучите основы Visual Basic по книге вроде моей. Затем или постарайтесь найти толстую книгу, в которой рассказано конкретно про то, что вам нужно, или воспользуйтесь для этого системой помощи (Help). Сразу же читать толстую книгу затруднительно – обычно она не предназначена для начинающих, если даже и утверждает обратное. Впрочем, толстая книга может и не понадобиться – в моей книге я постарался рассмотреть все, что разумный преподаватель может спросить на первом году обучения.

Если вы опытный программист в средах визуальной разработки программ, но хотите изучить еще и Visual Basic, вам эта книга не нужна - изложение рассчитано на начинающих.

Если у вас под рукой нет компьютера, то дела ваши плохи. Без компьютера, по одной только книге вы сможете научиться лишь писать на бумаге программный текст. Конечно, и это немало, однако напоминает чтение натощак, когда в холодильнике пусто, рецепта приготовления роскошного бифштекса. В среде визуальной разработки программ для Windows, которой является Visual Basic, программный текст – далеко еще не все.

Книга учит не только составлять программы, но и выполнять программы на компьютере. Все, что вам нужно знать заранее, это где кнопка включения компьютера. Все остальное в книге объяснено, включая инструкцию по установке Visual Basic на ваш компьютер.

  1.  Задачи, игры.

При создании книги очень важно было решить – какие выбрать примеры, на основе которых строить изложение материала. Здесь действует суровое правило: плохие примеры – плохая книжка, хорошие примеры – хорошая книжка, скучные примеры – скучная книжка, интересные примеры – интересная книжка.

Вот солидная и популярная тема для примеров – системы управления базами данных. Однако надолго интересной она может стать только для тех, кто имеет уже перед собой задачу эффективного управления большими и сложными базами данных, а таких читателей меньшинство. Поэтому базам данных посвящено ровно столько материала, сколько нужно, чтобы читатель понял, что это такое, сам мог создать базу данных, проделать с ней основные операции и затем понять толстые книжки, базам данных посвященные.

Я решил, что самой простой и интересной темой для примеров будут игры и другие занимательные задачи. Этот путь мне кажется самым веселым. А результат - ничуть не хуже, чем если бы мы занимались базами данных или чем-нибудь другим серьезным. Это не значит, что мы все время будем забавляться и играть. В программировании есть вещи, которые удобнее иллюстрировать на неигровых примерах.

Вот задачи на программирование, решенные в книге:

  •  Игра "Автогонки"
  •  Игра "Сачок", где вы должны ловить множество движущихся шариков
  •  Игра в «Угадай число»
  •  Задача: как поставить пароль на свою программу, чтобы никто, кроме вас, не мог ее запустить
  •  Задача: как запрограммировать сохранение в играх
  •  Собственный калькулятор (при желании - с вашей фотографией, музыкой, прыгающими кнопками и прочими «приколами»)
  •  Собственный будильник-секундомер
  •  Воспроизведение музыкальных произведений и вашего голоса.
  •  Воспроизведение видео.
  •  Собственный мультфильм
  •  Создание своих рисунков и узоров (круги на воде, звездное небо, мыльные пузыри, компакт-диск, башня, ковер и тому подобное)
  •  Задача: как в Интернете зайти в чужой компьютер (предварительно постучавшись)
  •  Задача: как в Интернете поместить на свою страничку игру
  •  Собственный графический редактор
  •  Зашифровка и расшифровка секретных файлов (объяснена простейшая шифровка и расшифровка)
  •  Определитель быстроты реакции вашей и ваших друзей
  •  Программа, определяющая, "экстрасенс ли вы"

Вот примеры задач, предлагаемые для самостоятельного решения:

  •  Задача: как изготовить собственный компакт-диск с вашими любимыми хитами
  •  Простейшая игра-стрелялка "Торпедная атака"
  •  Игра в крестики-нолики на бесконечном поле (пять в линию)
  •  Игра в морской бой
  •  Игра «Танковый бой» на неподвижном поле (вид сверху), где одновременно движутся и стреляют маленькие фигурки ваших и вражеских танков

Если вы энтузиаст программирования игр, то я должен вам сказать о том, какие игры будет НЕ под силу создавать начинающему программисту после изучения моей книги. Прежде всего это трехмерные (3D) игры типа Quake или Unreal. Учтите, что эти игры создают не новички, а профессиональные программисты и не в одиночку, а целыми фирмами. И используют они для этого специальные программные средства (например, Direct X), разобраться в которых можно, только съев пуд соли в геометрии и программировании. Изучение конкретного языка программирования - это всего лишь первая и не самая сложная ступенька в деле создания таких солидных продуктов, как качественная 3D-игра.

Если вы думаете, что начав изучать программирование не с Visual Basic, а с Delphi или C++, вы быстрее и легче придете к программированию более сложных игр, то глубоко ошибаетесь. Если бы вы обратились за советом, с чего начать, к профессиональному программисту, который всю жизнь писал игры на C++, то в ответ почти наверняка услышали бы: «Начни с Бэйсика, дружок!»

Так что, если вы вообразили описанную выше игру про мафию, как 3D, то ошиблись. Вот что вы сможете реально сделать. На экране – неподвижная картинка города, сколь угодно красивая, нарисованная вами или где-нибудь добытая. По городу движутся автомобили, прохожие, летят пули, вспыхивают лазерные лучи. Вы сможете создать голоса персонажей, звуки выстрелов и прочее. Однако движения персонажей будут не такими реалистичными, как в 3D-играх. Вам легко будет сделать, чтобы фигуры персонажей в застывшей позе двигались в любых нужных вам направлениях и даже при этом уменьшались в размерах (удаляясь в перспективе) или увеличивались (приближаясь). Немного труднее будет заставить их при этом передвигать ногами. Еще больше времени уйдет, чтобы запрограммировать более сложные движения, такие как повернуться боком, пригнуться, лечь, зарядить винтовку, улыбнуться, залезть в карман и тому подобное. Если герою вздумается долго идти направо, то вам трудно будет заставить город услужливо прокручиваться налево, как это происходит в играх-аркадах.

  1.  Почему Visual Basic?

Почему Visual Basic? Этот вопрос стоит перед новичками, которые не знают, с какого языка начать. Вот краткий обзор возможных вариантов.

Прежде всего, для полезного, занимательного и веселого изучения основных идей программирования существуют специальные учебные языки, рассчитанные на детей и новичков. Это «Кенгуренок», «Пылесосик», Лого. Кстати, Лого - язык достаточно богатый, чтобы программировать на нем и несложные игры с примитивной графикой. Но, к сожалению, эти языки мало распространены в России и по ним почти нет литературы. Так что вопрос о них отпадает. Поэтому перейдем к рассмотрению профессиональных взрослых языков. Сейчас наиболее известны Бэйсик, Паскаль, Си, Джава (Ява) в их самых разных версиях.

Но Ява пока применяется в основном только в Интернете. Так что остаются Бэйсик, Паскаль, Си.

Не так давно в ходу были старые, невизуальные версии сред программирования для этих языков. Теперь положение резко изменилось. Нет никакого вопроса в том, в чем вам программировать – в старой среде или в визуальной. Это все равно, что спрашивать, из чего лучше стрелять – из рогатки или из пушки. Остается выбрать конкретную среду – Visual Basic, Delphi, Visual C++ (для Бэйсика, Паскаля и Си соответственно) или какую-нибудь другую.

Си – высокопрофессиональный язык, программы, написанные на нем, имеют превосходное быстродействие, в среде программистов он распространен очень широко, но слишком сложен для восприятия новичком и с него лучше не начинать. Если вам очень уж хочется программировать на Си, рекомендую начать с Бэйсика. После него освоение Си пойдет гораздо легче.

Delphi по простоте программирования и эффективности получающихся программ занимает промежуточное положение между Visual Basic и Visual C++.

По мнению профессионалов наиболее легок и прост из упомянутых языков как раз Visual Basic. Профессиональные программисты любят его за то, что для создания на нем приличной программы требуется гораздо меньше времени, чем в других средах. Поэтому популярность у него огромная. Конечно, за все приходится платить, и у Visual Basic есть свои недостатки, но новичок почувствует их очень не скоро.

  1.  Какой вам нужен компьютер и какая версия Visual Basic?

Компьютер вам подойдет любой, на котором установлена операционная система Windows.

Любая программа, которую вы встретите в этой книге, является правильной программой в версии Visual Basic 6.0, а абсолютное большинство программ - и в более ранних версиях. Это естественно, так как основа языка едина для этих версий.

Теперь – о работе на компьютере. Каждая версия Visual Basic предлагает свой способ работы на компьютере (каждая следующая версия - все более удобный и мощный). В широком смысле этот способ называется средой программирования или средой разработки программ. Как я уже говорил, среды программирования версий Visual Basic 5.0 и Visual Basic 6.0 очень близки между собой в тех рамках, которыми я ограничиваюсь в книге. Все, что я буду говорить, относится к любой из них.

Последняя версия Visual Basic, а именно Visual Basic.NET, кардинально отличается от своих предшественниц. Она гораздо мощнее, однако, я бы сказал, менее легка для начинающих. Я рекомендую ее тем, кто на первых порах готов платить больше.

  1.  Краткое содержание с рекомендациями

Книга состоит из трех частей и двух приложений:

Часть I. Программирование без программирования.  

У этой части две цели:

  •  Научить самым основным и элементарным приемам работы в Visual Basic.
  •  Показать, что в Visual Basic можно добиваться впечатляющих результатов практически безо всякого программирования.

Доказательством тому - проект "Калькулятор", который получится у вас гораздо ярче и забавнее, чем стандартный калькулятор Windows.

Часть II. Программирование на Visual Basic – первый уровень. Здесь начинается настоящее программирование. Цель этой части – провести вас от создания самых простых программ до сложных. Здесь вы учитесь программировать на Visual Basic самым удобным способом - на примерах, то есть по принципу “делай, как я”. Вы научитесь создавать небольшие программы, включающие циклы, ветвления, процедуры и использующие графику и звук. Заканчивается часть созданием двух интересных проектов и заданием на создание простейшей игры-стрелялки. Предполагается, что после выполнения этого задания у вас должно возникнуть ощущение всесильности, вы должны почувствовать, что теперь вам по плечу программа любого размера, а все, что вам может понадобиться в будущем, так это только дополнительные сведения о работе с теми или иными элементами Visual Basic.

Часть III. Программирование на Visual Basic – второй уровень. Цель этой части – снабдить вас этими самыми сведениями. Вы познакомитесь с действиями над массивами, коллекциями, строками, файлами, объектами и другими элементами Visual Basic. Вы изучите процедуры и функции с параметрами, модули, узнаете, что такое рекурсия и сортировка. Здесь же работа в Интернет, базы данных, создание собственных классов объектов.

Приложение 1. Это теоретический ликбез. Предназначен для тех, кто не знает, как устроен и работает компьютер.

Приложение 2. Это практический ликбез. Предназначен для тех, кто ни разу не садился за компьютер или садился только для игр. Здесь вы научитесь включать и выключать компьютер, работать с окнами, папками и файлами Windows, вводить в компьютер текст, то есть приобретете все нееобходимые навыки, чтобы спокойно начать работу в среде Visual Basic.

Не зная материала приложений, вы будете в Visual Basic спотыкаться на каждом шагу.

Затем в книге приводятся решения к заданиям и солидный предметный указатель.

От автора

Хочу выразить искреннюю признательность Николаю Геннадьевичу Волчёнкову, прочитавшему рукопись и высказавшему ряд важных замечаний по ее содержанию.

Также хочу поблагодарить Алексея Лукина за ценное обсуждение.

 К читателю

Буду благодарен за критические замечания и буду рад услышать ваши отзывы о книге. Мой e-mail: lukin63@mail.ru.

Другие мои книги по программированию и по работе на компьютере вы можете найти на сайте www.learncomp.narod.ru.


Часть I. Программирование без программирования

Эта часть нужна для того, чтобы, прочтя ее, вы могли сказать себе: "Я освоился и могу делать в Visual Basic интересные вещи, не напрягаясь". То есть, поясню, почти без программирования. Почти, но не абсолютно. Простенький программный текст все-таки придется писать.

В 1 главе вы создадите свой первый проект на Visual Basic.

Во 2 главе вы создадите собственный калькулятор, снабдив его фотографией, музыкой и даже видео. Цель главы - распахнуть перед вами основные простые и одновременно яркие возможности Visual Basic.

Завершается часть главой 3 "Работа в среде Visual Basic", которая излагает основные приемы работы на компьютере при программировании на Visual Basic.


  1.  Первые шаги

В этой главе вы создадите и опробуете на компьютере свою самую первую программу на Visual Basic. Для этого глава и написана.

  1.  Что такое программа?

Прежде чем программировать на компьютере, надо бы узнать, что такое компьютер и программа. Подробно об этом рассказано в Приложении 1 и всех начинающих я настоятельно отправляю туда. Если же вы считаете, что переросли тот "детский" материал, то вам достаточно будет того, что сказано ниже.

Что такое программа с точки зрения Visual Basic, удобнее всего рассмотреть на аналогии. Представьте себе, что к вам, живущему в большом городе, в гости приехал ваш знакомый, никогда не выезжавший из своего поселка. Он хочет сходить на футбол, а вам идти вместе с ним некогда. Чтобы он смог добраться до стадиона и вернуться живым и здоровым, вы пишете ему на листе бумаги такую инструкцию.

  •  

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  

  1.  
  2.  
  3.  
  4.  
  5.  

  1.  
  2.  
  3.  

  1.  
  2.  

  1.  
  2.  
  3.  

  1.  
  2.  

  1.  
  2.  

Как видите, на листке - несколько инструкций. Они - двух типов. Одни начинаются со слов "Что делать, если …", другие - со слова "Как".

Самая верхняя главная инструкция состоит из 9 команд и предписывает строгий порядок действий для достижения цели. Инструкции, начинающиеся со слова "Как", описывают каждое из этих действий более подробно. Так, инструкция "Как дойти до метро" подробно описывает выполнение команды "Дойди до метро". Так как в этой инструкции встречается команда "Перейди улицу", которая сама нуждается в пояснении, то имеется инструкция "Как переходить улицу". И так далее.

Зачем я написал так много инструкций типа "Как"? Не проще ли было бы написать одну длинную главную инструкцию из "пары тыщ" команд, в которой бы задавались по порядку все мелкие действия от начала до конца похода, начиная с "Подойди к лифту и нажми кнопку" и кончая "Подойди к дверям нашей квартиры и позвони"? Проще, оно может быть и проще, да вот инструкция получится слишком длинной. Почему длинной? Потому что, например, переходить улицу надо будет раз восемь, и выходит, что в инструкции придется восемь раз писать одни и те же пояснения, как это делать. И еще потому не нужно писать длинную инструкцию, что человеку гораздо приятней и удобней воспринимать короткие инструкции, чем длинные.

Порядок выполнения упомянутых инструкций строго определен. Попробуйте нарушить его и вы увидите, что будет. Например, сначала попытайтесь пройти на трибуны, и только потом купить билет. Или сначала зайдите в дверь лифта и только потом проверьте, есть ли там кабина.

Однако, жизнь сложна, и в ней могут происходить события, которые трудно привязать к какому-то конкретному этапу выполнения инструкции. Например, вы можете заблудиться (причем, в любом месте, как по пути туда, так и по пути обратно), или ваш лифт может застрять. На этот случай пишутся инструкции, начинающиеся словами "Что делать, если …" и предписывающие, как реагировать на то или иное событие.

В программировании на Visual Basic все эти инструкции называются процедурами. Команды, из которых они составлены, называются операторами. Весь набор инструкций на листке назовем программой. А события так и будем называть событиями.

  1.  Не программа, а проект

Вообразите, что вы не программу на Visual Basic пишете, а собираете на столе игрушечную железную дорогу. В вашем распоряжении находятся объекты: стол, рельсы, паровозы, вагоны, светофоры, машинисты, стрелочники и т.д. Чтобы игрушка заработала, вам нужно выполнить 3 этапа:

  1.  Собрать ее вручную, то есть поместить на свои места и правильно соединить рельсы, вагоны и т.д.
  2.  Для лучшего понимания 2 этапа вообразим себе, что наша игрушка очень интеллектуальная, то есть поведение многих объектов (таких как машинисты, стрелочники, светофоры и другие) может быть сложным и осуществляться по программе. Тогда вторым этапом вашей работы будет - написать для каждого из таких объектов программу поведения. Так, в программе для машиниста одна из команд может быть такой: "Если впереди на светофоре красный свет - тормози", а в программе для светофора - такой - "Если два поезда опасно сблизились - зажигай красный свет".
  3.  Запустить игрушку и посмотреть, как она работает. Если произошло крушение или что-нибудь еще пошло не так, как надо, то значит одно из двух: или вы неправильно собрали игрушку или написали неправильные программы. Вы исправляете ошибки и снова запускаете игрушку. Снова смотрите, снова исправляете. И так до тех пор, пока все не заработает нормально. Этот процесс называется отладкой.

Современный программист, работающий в средах визуальной разработки программ, выполняет те же три этапа. На 1 этапе он вручную расставляет на экране компьютера объекты, которые будут выполнять его программу, на 2 этапе пишет программу, на 3 этапе запускает ее. Что конкретно я имею в виду под расстановкой объектов, вы узнаете в следующем разделе, а сейчас остается сказать, что из-за 1 этапа работа программиста теперь напоминает работу конструктора-проектировщика и частично из-за этого же продукт работы программиста называют теперь не программой, а проектом. Хотя термин этот еще не привился и чаще пользуются прежним. Я тоже, наверное, буду их путать. Правда, обещаю, что не в ущерб смыслу.

  1.  Первые шаги - за ручку

Лучший способ познакомиться с Visual Basic - поскорее создать и запустить какой-нибудь проект, пусть маленький и никому, кроме нас, не нужный, но зато с ним мы пройдем все этапы работы в Visual Basic. Этим мы сейчас и займемся. Садитесь за компьютер и приступим. Без компьютера этот раздел принесет вам мало пользы. Все, что я говорю, вы отныне должны немедленно выполнять на компьютере, чтобы проверить, правду я говорю или нет. Учиться Бэйсику без компьютера - все равно, что учиться кататься на велосипеде без велосипеда. Иногда я буду прямо говорить: "Нажмите такую-то клавишу" или "Сделайте на компьютере то-то и то-то". Но чаще я буду просто излагать материал, не повторяя по сто раз, что нужно проверять на компьютере каждое мое слово. Например, я говорю, что данная процедура по такой-то причине работает медленнее другой, и сразу же перехожу к другой теме. Стоп! Не надо спешить за мной. Сначала проверьте, так ли это на самом деле.

Запускаем Visual Basic

Начинается все, конечно, с того, что вы запускаете Visual Basic. Если Visual Basic у вас на компьютере не установлен, читайте , а если установлен, но вы не знаете, как его запускать, читайте . В результате запуска на экране появляется главное окно Visual Basic, в центре которого вы видите другое окно - приглашение начать создавать новый проект (см. рисунок). Если приглашение не появилось, то щелкните по пункту меню File, а затем выберите в выпавшем меню пункт  Add Project - и оно появится.

(В дальнейшем вместо словесного описания щелчков мыши в меню я для краткости буду писать - FileAdd project).

Вам предлагается выбрать тип проекта, который вы хотите создавать. Пока нам достаточно стандартного типа. Щелкните в окне приглашения в закладке New по значку Standard EXE, а затем по кнопке Open. Перед вами возникает следующая картинка, говорящая о том, что вы можете приступать к проектированию (внешний вид картинки у вас может быть немножко другой):

Что вас на картинке больше всего должно интересовать, так это серый прямоугольник в точечку, расположенный в цетре на белом фоне. Это так называемая форма. Что же это такое - форма? Вспомним нашу игрушечную железную дорогу. Так вот, форма - это пустой стол, тот самый стол, на котором мы эту дорогу будем собирать. Когда вы запустите проект, форма станет окном Windows.

Обратите внимание на три черных квадратика – маркера – в правой нижней части формы. Ухватившись за них мышкой, вы можете менять размеры формы. Но таскать форму по экрану вам здесь не удастся.

Начнем работу над проектом с 1 этапа. Чтобы собрать железную дорогу, нам нужны объекты: рельсы, вагоны и т.п. Чтобы создать проект, нам тоже нужны объекты - и Visual Basic нам их предоставляет. В левой части главного окна Visual Basic мы видим вертикальную серую панель. Это Toolbox (блок или палитра элементов управления), то есть набор наиболее популярных стандартных объектов, применяемых при создании проектов на Visual Basic. В их числе кнопка, текстовое поле, таймер, изображение и др. Чтобы познакомиться с названием какого-нибудь элемента, поместите на него мышиный курсор, не нажимая.

Если Toolbox вашего компьютера слишком узкий и на нем не помещаются все элементы, вы можете для его расширения перетащить мышкой его границу.

Замечание: Понятие "Объект" имеет в Visual Basic гораздо более широкий смысл, чем форма или элемент управления, но поскольку других объектов мы пока не знаем, я буду называть объектами именно их.

Размещаем объекты на форме

Ну что ж, начнем сборку. Возьмем кнопку (CommandButton) и поместим на форму. Для этого щелкнем по кнопке, а затем проведем мышкой внутри формы небольшую "рамочку". Что значит провести "рамочку"? Это значит поместить мышиный курсор куда-нибудь внутрь формы, нажать на левую клавишу мыши и, не отпуская клавишу, "протащить" мышь немного наискосок. При этом за курсором будет тянуться "рамочка". Отпустите мышь. На месте рамочки возникнет кнопка с надписью Command1.

По краям кнопки вы увидите 8 черных квадратиков - маркеров изменения размеров. Если щелкнуть по форме мимо кнопки, они пропадут, если снова щелкнуть по кнопке - появятся. Только не надо пока двойных щелчков. Перетащите мышкой любой из маркеров - размеры кнопки изменятся. Можно таскать кнопку по форме, если ухватиться мышью не за маркер, а за любое место внутри кнопки. Чтобы уничтожить кнопку, щелкните по ней правой клавишей мыши и в выскочившем контекстном меню выберите опцию Delete. Проделайте все это. А теперь, если вы ее уничтожили, то снова создайте.

Аналогичным образом поместим на форму объект текстовое поле (TextBox). Теперь у нас на форме два объекта.

Обратите внимание на слово [design] (проектирование) в заголовке главного окна Visual Basic. Оно говорит о том, что в настоящий момент Visual Basic находится в режиме проектирования, во время которого мы можем собирать наш проект (1 этап) и писать для него программу (2 этап).

Пока мы с вами создаем сами не знаем что. Ведь никакой задачи мы перед собой не поставили. Тем не менее, перескочим через 2 этап (составление программы) и сразу выполним 3 этап, то есть запустим наш проект на выполнение. Для этого щелкнем мышкой по кнопке Start на панели инструменов (не путать с блоком элементов управления).

Исторический момент. Что мы видим? Форма немного изменилась, пропали точки, она потеряла связь с главным окном Visual Basic и ведет себя, как независимая программа. Для убедительности сверните на панель задач главное окно Visual Basic. Теперь форма одна царит на экране. Ее можно таскать по всему экрану, ухватившись за заголовок, и ее значок вы можете видеть на панели задач Windows. Она надлежащим образом реагирует на щелчки по кнопкам в ее правом верхнем углу. Если подвести острие курсора к краю или углу формы, то можно менять ее размеры. А вот размеры кнопки и текстового поля мы не можем больше менять. Зато теперь на кнопку можно нажимать мышкой. Нажимаем. Ничего не происходит. Естественно - мы ведь не написали программу, объясняющую компьютеру, что нужно делать при нажатии на кнопку.

В текстовое поле теперь можно вводить текст и как угодно там его менять. Но и это без толку. Компьютер никак не реагирует, что бы мы там ни написали. Причина та же.

Если вы при несвернутом главном окне Visual Basic случайно щелкнете по нему мышкой мимо формы, то форма пропадет из вида, так как будет загорожена главным окном. Не беда - щелчок по значку формы на панели задач Windows вернет ее на передний план.

Обратите внимание на слово [run]  (бег, работа) в заголовке главного окна Visual Basic. Оно говорит о том, что в настоящий момент Visual Basic находится в режиме работы, то есть в режиме выполнения проекта (3 этап), во время которого мы ни собирать проект (1 этап), ни писать для него программу (2 этап) не можем.

Итак, мы видим, что без программы наш проект не стоит ни гроша. Завершим выполнение проекта кнопкой End на панели инструментов или щелкнув по крестику в правом верхнем углу формы. Visual Basic вышел из режима [run] и вернулся в режим [design]. Теперь в проекте можно что-нибудь поменять и снова его запустить. И так далее.

Пишем программу

Давайте придумаем себе задачу для нашего проекта. Пусть на экране при нажатии кнопки что-нибудь происходит. Легко сказать - пусть! Для этого нужно знать, что вообще умеет делать Visual Basic при нажатии на кнопки, а если даже мы это знаем, то все равно не знаем, как это приказать, то есть как правильно написать программу. Ну что ж. Программирование мы будем изучать постепенно и постепенно всему научимся, а сейчас я выберу что-нибудь самое простое и подскажу, как это делается. К компьютеру не подходите, пока я не скажу.

Прикажем компьютеру при нажатии кнопки поменять цвет формы на красный. Команда (оператор) для этого пишется так:

Form1.BackColor = vbRed

Разберемся, что здесь написано.

Form1  - это имя нашей формы (его дал Visual Basic и мы пока не будем его менять)

BackColor   - переводится "цвет фона", то есть это цвет, которым покрашена форма (пока он серый)

vbRed  - это красный цвет (Red - красный, vb - Visual Basic)

Таким образом, наш оператор можно перевести так:

Form1.цвет = красный

Правило такое: Слева от точки мы записываем имя объекта, справа от точки - его свойство, а справа от знака равенства - значение этого свойства. Точку писать обязательно. Аналогия -

Коля.рост = 140

Бразилия.климат = жаркий

Visual Basic воспримет наш оператор как приказ поменять цвет формы на красный. Теперь как нам сделать, чтобы компьютер выполнил этот оператор именно при нажатии на кнопку, а не в какой-либо другой момент? Садитесь за компьютер.  Проверьте, находимся ли мы в режиме проектирования [design]. Сделайте двойной щелчок по кнопке Command1. Перед вами возникнет новое окно - окно программного кода или просто окно кода. Чтобы мы не спутались, в заголовке окна присутствует слово (Code).

Будем называть кодом любой текст программы. Таким образом, в окно кода будем записывать всю программу нашего проекта (большие проекты могут использовать несколько окон кода).

Мы видим, что в окне кода уже что-то написано. Строку Private Sub Command1_Click() можно вольно перевести как "Что делать, если щелкнуть (по-английски - Click) мышкой по кнопке Command1". Слово Private переводится "локальный" и о его смысле поговорим позже. Слово Sub обозначает "процедура". Таким образом, более точно эту строку переводим так: "Локальная процедура, в которой компьютеру пишется инструкция, что делать, если человек мышкой нажмет на кнопку Command1".

Ниже оставлено свободное место и там уже мигает курсор, приглашая нас вводить туда какие нам угодно операторы. Они-то и будут выполнены при щелчке по кнопке. Еще ниже находится строка End Sub, что означает "конец процедуры".

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

Введите на свободное место с клавиатуры наш оператор Form1.BackColor = vbRed. Если у вас нет опыта ввода текста в компьютер, то прервитесь и изучите Приложение 2. Вы не имеете права допустить ни малейшей ошибки в строке. Даже лишний пробел может быть ошибкой.

Кстати, Visual Basic очень услужлив. Когда вы введете точку, он (чтобы вам не утомлять свои персты вводом слова BackColor) развернет перед вами список всех уместных после точки слов. Вам останется только сделать двойной щелчок на нужном слове.

Если вы случайно щелкнете мышкой мимо окна кода, оно может пропасть из вида. Не беда. Ваши действия: ViewCode.

Если же окно кода загораживает от вас форму, а вам хочется что-нибудь в ней сделать, то ваши действия: ViewObject.

Но вот ввод оператора закончен. Теперь окно кода должно иметь такой вид:

Перед вами готовая процедура. Проверьте, не ввели ли вы по ошибке что-нибудь выше, ниже или правее этих трех строк. Если ввели, то сотрите.

Пришла пора снова запускать проект. Предположим, вы при вводе кода в окно нигде не ошиблись. Щелкните кнопку Start. На экране опять появляется знакомый вид формы с кнопкой и текстовым полем. Щелкните по кнопке - форма стала красной. Поздравляю! Ваш первый проект заработал. Щелкните еще раз. Ничего не изменилось. Естественно. Завершим выполнение проекта кнопкой End.

Если у вас при запуске получилось не то, что нужно, прочтите чуть ниже параграф "Как реагировать на сообщения Visual Basic об ошибках".

Сохранение, создание, открытие, закрытие проекта

А теперь нам пора сохранить проект. Вообще-то, сохраниться нам надо было еще давно, до первого запуска, но не хотелось отвлекаться. О том, зачем и как сохранять и загружать проект в Visual Basic, читайте в . Если же у вас есть опыт сохранения при работе в Windows, то можете сразу сохраняться при помощи File  Save Project, только помните, что проект сохраняется не в один, а в несколько файлов, поэтому обязательно для каждого проекта создавайте свою папку. Visual Basic предложит вам стандартные имена для сохраняемых файлов. Пока не меняйте их.

Сохранившись, вы можете спокойно выйти из Visual Basic, щелкнув по крестику в правом верхнем углу главного окна, и можете даже выключить компьютер. Чтобы продолжить через некоторое время работу над проектом, запустите Visual Basic и загрузите (откройте) сохраненный проект при помощи File  Open Project. 

Если вы хотите начать новый проект, то выполните File  New Project.

Через некоторое время у вас накопится несколько сохраненных проектов. Вот вы поработали с одним из них и хотите, не выходя из Visual Basic, поработать с другим. Пока у вас еще мало опыта, я рекомендую такой порядок действий:

  •  сохраните проект
  •  удалите его из главного окна Visual Basic (не с диска, конечно) - File  Remove Project. Теперь в главном окне Visual Basic и в окне Project Explorer у вас должно быть пусто. Заголовок Project Explorer должен быть таким: Project - No Open Projects.
  •  Откройте другой проект при помощи File  Open Project или создайте новый при помощи File  New Project.

Если вы попытаетесь открыть или создать другой проект, не сохранив старый, Visual Basic предложит вам его сохранить и после сохранения автоматически удалит из среды. Если вы по ошибке вместо File  Open Project или File  New Project выполните File  Add project, то старый проект не будет удален и в главном окне Visual Basic вы будете иметь вместо одного сразу два проекта. Вы это сразу же заметите, взглянув в окно Project Explorer. Иногда иметь два проекта удобно, иногда просто необходимо, но пока вам будет не повернуться в такой тесноте. Если это все же произошло, жмите File  Remove Project, отвечая отказом на предложения сохраниться, пока главное окно Visual Basic не опустеет.

Часто новый проект, который мы создаем, бывает похож на старый, и удобнее не новый создавать, а старый переделывать. Мой опыт таков. Я копирую папку старого проекта. Затем открываю копию проекта и переделываю ее в новый проект. Как копировать папки, написано в .

Как реагировать на сообщения Visual Basic об ошибках

Если вы при вводе кода в окно где-то ошиблись, то Visual Basic при запуске или сделает что-нибудь не то (например, покрасит форму в черный цвет) или даст вам знать об ошибке специальным сообщением. Сообщения могут возникать как в режиме проектирования, так и в режиме работы. Сейчас имеет смысл потренироваться. Давайте будем специально допускать ошибки и смотреть, что будет:

Form1.BackColor = vbRedd

Visual Basic вообще не заметит этой ошибки и покрасит форму не в тот цвет. Завершите работу проекта и исправьте ошибку.

Private Sub Command1_Clictk()

И этой ошибки Visual Basic не заметит. Просто при нажатии на кнопку ничего красится не будет.

Form1.BackColo = vbRed

Visual Basic не заметит этой ошибки до тех пор, пока вы в режиме работы не нажмете на кнопку. Тогда он выдаст сообщение об ошибке, пока для вас, впрочем, невразумительное, и выделит подозрительное место в программе. Вы можете нажать Help и тогда Visual Basic подробнее пояснит, что он имел в виду. Но пока смысл пояснения вряд ли до вас дойдет. Нажимайте OK и Visual Basic выделит желтым заголовок подозрительной процедуры. Завершите работу проекта и исправьте ошибку.

Foorm1.BackColor = vbRed

И этой ошибки Visual Basic не заметит до тех пор, пока вы в режиме работы не нажмете на кнопку. В окне сообщения об ошибке нажмите Debug, тогда Visual Basic выделит подозрительную строчку в программе. Завершите работу проекта и исправьте ошибку.

Form1.BackColor = = vbRed

А вот эту ошибку Visual Basic заметит еще в режиме проектирования, как только вы попытаетесь убрать курсор из ошибочной строки в другое место. Подозрительное место будет выделено. Жмите ОК и исправляйте ошибку.

Кстати, когда вы убираете курсор из вводимой строки, Бэйсику кажется, что вы закончили с ней работу. Он проверяет ее на наличие грамматических ошибок и если не находит, то немного изменяет ее внешний вид, приведя к стандартному.

Visual Basic не всегда правильно находит подозрительные места. Часто программисту самому приходится превращаться в детектива. Я не буду здесь останавливаться на сложном процессе поиска ошибок, так как вы еще к этому не готовы. Достаточно будет, если вы еще раз посмотрите, так ли выглядит ваш код, как на рисунке. Нет ли чего лишнего, в том числе ниже строки End Sub? Все ли буквы английские, или есть русские? Человеку очень легко спутать английские буквы с русскими того же начертания, компьютер же не спутает никогда и придерется.

Усложняем проект

Итак, вы сохранили свой первый проект. Закройте его - FileRemove Project. Скопируйте папку проекта тут же, рядышком. Над копией будем продолжать работать.

Пусть при щелчке по кнопке происходит что-нибудь еще, кроме окрашивания формы. Например, изменяется размер шрифта в текстовом поле. Для этого достаточно в окне кода дописать следующий оператор:

Text1.FontSize = 16

Здесь Text1 - имя текстового поля, FontSize - размер шрифта. Наш оператор можно перевести так: Сделать размер шрифта текстового поля Text1 равным 16. Теперь содержимое окна кода таково:

Private Sub Command1_Click()

Form1.BackColor = vbRed

Text1.FontSize = 16

End Sub

При щелчке по кнопке Visual Basic выполняет по порядку все операторы процедуры между строками Private Sub Command1_Click() и End Sub. Запустим проект кнопкой Start. Убедимся, что оба оператора выполнились. Поскольку компьютер работает очень быстро, нам будет казаться, что оба оператора выполнились одновременно. Но это не так: сначала поменялся цвет формы, а уж затем размер шрифта.

Продолжим работу. Пусть при нажатии на кнопку кроме всего прочего в текстовом поле появляется текст "Теперь форма красная". Для этого достаточно в окне кода дописать еще один оператор:

Text1.Text = "Теперь форма красная"

Здесь Text1 - имя текстового поля, Text – его свойство, а именно – текстовое содержимое. Привыкайте к почти одинаковым обозначениям разных вещей (у нас это Text1 и Text) и будьте внимательны. Наш оператор можно перевести так: Содержимое текстового поля Text1 сделать таким - "Теперь форма красная". Вид окна кода стал таким:

Private Sub Command1_Click()

Form1.BackColor = vbRed

Text1.FontSize = 16

Text1.Text = "Теперь форма красная"

End Sub

После каждого изменения в окне кода проверяйте, как работает проект.

Продолжим. Создадим на форме еще одну кнопку:

Ее имя - Command2. Пусть при щелчке по ней форма окрашивается в желтый цвет (vbYellow), размер шрифта становится равным 12, в текстовом поле появляется текст "Теперь форма желтая"

Для этого так же, как и в случае с кнопкой Command1, сделаем по кнопке Command2 двойной щелчок мышкой. Перед нами - снова окно кода, но в нем появилась заготовка другой процедуры, то есть новое приглашение - для ввода операторов, реагирующих на щелчок кнопки Command2. Введем их. Теперь содержимое окна кода таково:

Запустите проект. Пощелкайте по кнопкам.

Давайте проведем аналогию между нашей программой и программой, которую мы дали любителю футбола в .

  •  Та программа состояла из нескольких процедур, эта также состоит из двух процедур.
  •  Та программа описывала поведение человека в городе, эта описывает поведение объектов на форме Form1.
  •  В той программе процедура состояла из команд, записанных одна за другой и выполнявшихся в порядке записи. В этой программе - то же самое: процедура состоит из операторов, записанных один за другим и выполняющихся в порядке записи.
  •  В той программе встречались процедуры разных типов ("Как…..", "Что делать, если…"). В этой программе обе процедуры одного типа - "Что делать, если нажата кнопка".
  •  В той программе события - это  "Застрял лифт", "Заблудился", в этой события - это нажатия на кнопки.

Что дальше?

Итак, проект готов и работает. Что дальше? Пока не очень понятно, как нам запрограммировать что-нибудь посложнее, например, игру с перестрелкой из предисловия. Могу пояснить. Вы растягиваете форму во весь экран и придаете ей не цвет, а фотографию или нарисованный вами рисунок города. Получается город во весь экран. Далее берете в Toolbox и расставляете по форме объекты типа Image (изображение) - это ваши будущие автомобили, прохожие, гангстеры, пули и т.п. Затем придаете каждому объекту нужную внешность. Для этого тоже разыскиваете где-то фотографии или сами рисуете. Наконец, пишете для каждого из этих объектов программу поведения, включая реакцию на нажатия клавиш и мышиные щелчки. Игра готова, можно запускать. Основная трудность здесь, конечно, в написании программы, она будет достаточно сложной и вам предстоит еще многому научиться, чтобы почувствовать себя в силах ее создать.

В Visual Basic много любопытных и полезных элементов управления. Так, вставив в форму объект типа Timer, вы сможете управлять работой проекта "по секундам". Многие элементы управления на Toolbox не показаны. Но их легко туда поместить и пользоваться ими. Так, вставив в форму объект типа Microsoft Multimedia Control 6.0, вы сможете сопровождать игру музыкой, звуковыми эффектами и видео. Следующая глава познакомит вас со многими полезными и приятными возможностями Visual Basic.


  1.  Проект - "Калькулятор"

В этой главе на примере создания калькулятора я хочу познакомить вас с простыми и приятными возможностями Visual Basic. По сути, калькулятор будет нам проводником по элементарным средствам Visual Basic. Многие из них вы найдете именно в этой главе. По ходу дела нам удастся углубить и расширить наши знания Visual Basic. В то же время глава носит несколько рекламный оттенок. Перед вами распахнется скатерть-самобранка, на которой вы увидите в основном то, что повкуснее и не требует разгрызания. Однако, среди вкусного будет и полезное, и необходимое, поэтому читать главу "по диагонали" никак нельзя, без нее не будет понятно все остальное.

  1.  Задание на проект

В  мы с вами ничего путного не создали, зато прошли с начала до конца весь путь создания проекта на Visual Basic.

Сейчас мы поставим перед собой задачу сделать реальную вещь - калькулятор. Примерно такой же, какой имеется в Windows. Если вы его забыли, то в Windows (а отнюдь не в Visual Basic), выполните такие действия: Пуск Программы Стандартные Калькулятор. Как по вашему - много сил затратила фирма Microsoft на его создание? Калькулятор, который создадим мы, в смысле математики будет попроще, зато он будет красивым, снабжен музыкой, паролем и разными другими "приколами".

Начнем с того, что придумаем нашему калькулятору внешний вид (пока скромный):

Идея такая - вы набираете в двух верхних текстовых полях первое и второе число, затем щелкаете по одной из кнопок и в нижнем текстовом поле получаете результат.

  1.  Проектируем

Создайте новый проект и разместите на форме три текстовых поля и четыре кнопки. У вас получится вот так:

Чтобы продолжить дальше, нам нужно поближе познакомиться со свойствами форм и элементов управления.

  1.  Свойства форм и элементов управления

Чуть раньше мы уже познакомились с такими свойствами объектов, как BackColor, FontSize, Text. Количество свойств у каждого из объектов довольно большое. Многие из них мы можем менять в режиме работы [run] при помощи программы, как мы это уже делали (например, Form1.BackColor = vbRed). Оказывается, многие свойства форм и элементов управления можно менять и в режиме проектирования [design]. Делается это вручную, безо всякого программирования (для того и задумано, что вручную легче!).

Вы сейчас в режиме [design]? Хорошо. Один щелчок по кнопке Command1. При этом на кнопке появляются маркеры. Говорят, что объект выделен, стал активным. В этом случае его свойства вы можете видеть в окне свойств объекта (см. рисунок в ). Если это окно кажется вам маловатым, попробуйте растянуть его, ухватившись за края. В окне два столбца: название свойства и его значение. Для вашего удобства свойства могут быть упорядочены по алфавиту (закладка alphabetic) или сгруппированы по категориям (закладка categorized).

Попробуем изменить значение какого-нибудь свойства кнопки Command1. Найдите в окне свойство Width (ширина), а справа - его численное значение. Введите вместо имеющегося там числа другое число, например, 200. Вы видите, что ширина кнопки изменилась. Точно такого же результата вы добились бы в режиме работы [run], выполнив оператор Command1.Width = 200. А теперь поступим наоборот - перетащим немного влево или вправо один из маркеров кнопки. Мы увидим, что соответственно изменилось и число.

Выделим щелчком какой-нибудь другой объект. Теперь в окне свойств - его свойства. Выделим форму, щелкнув по любому свободному месту ее поверхности - теперь мы видим и можем менять ее свойства. И так далее.

С названиями и смыслом разных свойств я буду знакомить вас постепенно.

  1.  Имена и надписи

У каждого объекта есть имя (Name). У многих есть надпись (Caption). Имя и надпись являются свойствами объекта. Попробуем их изменить и разобраться, зачем они нужны. В предыдущем проекте мы не заботились об именах и надписях и хорошо делали, потому что Visual Basic в случае нашей беспечности (как говорится - по умолчанию) сам придает значения свойствам, в том числе именам и надписям, причем, недолго думая, имя и надпись он делает одинаковыми. Проверим. Выделим форму. Заглянем в окно свойств и найдем там имя (Name) - оно в алфавите выше всех. Так и есть, имя нашей формы - Form1. Изменим его, скажем, на слово Калькулятор. Изменили. И что же? В заголовке формы ничего не изменилось. Дело, конечно, в том, что в заголовке мы видим не имя, а надпись. Имя остается скрытым (полковник Исаев), а надпись видна всем (Штирлиц). Убедимся в этом. Найдем в окне свойств свойство надпись (Caption). Ну конечно - надпись на нашей форме - тоже Form1. Изменим ее на Личный калькулятор Вовочки - классного программиста. Теперь все в порядке.

Зачем мы изменили надпись, нам понятно. А почему надо было менять имя? Ну, хотя бы потому, что оператор

Калькулятор.Width=6000

как-то понятнее, чем

Form1.Width=6000

Займемся кнопками. Выделим кнопку Command1 и дадим ей имя Кл_сложения.

Внимание! Имя должно состоять только из букв, цифр и знаков подчеркивания, причем начинаться имя должно с буквы. Раз в именах запрещены пробелы, я использовал вместо них знак подчеркивания.

Подробнее об именах см. в .

Надпись нашей кнопки должна состоять из единственного символа +. Найдем + на клавиатуре и введем. На кнопке он получился маловат. Чтобы его увеличить, найдем в окне свойств свойство Font и щелкнем по нему. В поле значения появилась кнопочка с троеточием - это всегда приглашение к дальнейшему разговору. Щелкнем по ней - перед нами появилось так называемое диалоговое окно, предлагающее выбрать размер шрифта (Size), стиль (Font Style), сам шрифт (Font) и кое-что другое. Стиль может быть обычным (Regular), курсивом (Italic), полужирным (Bold) и полужирным курсивом (Bold Italic). Среди самих шрифтов (Font)  попадаются любопытные. Выберите размер и прочее по вкусу. С клавишей сложения закончили.

Аналогичным образом придайте имена и надписи трем другим кнопкам. Имена: Кл_вычитания, Кл_умножения, Кл_деления. В качестве надписей для клавиш умножения и деления можете выбрать букву Х и двоеточие.

Теперь займемся текстовыми полями. Придумаем и дадим им имена: Число1, Число2, Результат. А вот свойства Надпись (Caption) у текстовых полей нет. Вместо него есть свойство Text.  Поскольку мы хотим, чтобы в начале работы с калькулятором в текстовых полях было пусто, сотрем в окне свойств значения свойства Text для всех трех полей.

А теперь займемся пояснительным текстом в левой части калькулятора (Первое число, Второе число, Результат). Для этого нам понадобится новый элемент управления - Label (метка), который в основном для пояснений и применяется. Найдите Label в окне Toolbox и поместите на форму три метки. Ваш проект выглядит так:

Заглянем в свойства меток. Мы видим, что Visual Basic по обыкновению дал каждой метке совпадающие имя и надпись (Label1,  Label2,  Label3). Имена менять мы не станем затрудняться, потому что в программе они никак участвовать не будут, а надписи, конечно, переменим на Первое число, Второе число, Результат, да и шрифт, пожалуй, увеличим.

Нам остается поместить на форму горизонтальную линию. Для этого найдем в окне Toolbox элемент управления Line иния) и проведем линию на форме. Чтобы она была потолще, изменим в окне свойств свойство линии BorderWidth.

Итак, проектирование первой версии калькулятора закончено! Теперь калькулятор выглядит так, как задано. Можно приступать к программированию.

  1.  Программируем. Проект готов

Запустим проект. Введем в верхнее текстовое поле число 3, а в среднее введем 2. Щелкнем по кнопке сложения. Ничего не произошло. Естественно. Ведь никакой процедуры мы для кнопки не написали. Завершим работу проекта. Двойным щелчком по кнопке сложения откроем окно кода и попытаемся выдумать, что же там написать. Рассуждать будем так: 3 и 2 - не что иное, как значения свойства Text текстовых полей Число1 и Число2. По-другому, это Число1.Text и Число2.Text. Нам нужно, чтобы Результат.Text равнялся их сумме. Что если написать такой оператор:

Результат.Text = Число1.Text + Число2.Text

Сказано - сделано. Получаем:

Private Sub Кл_сложения_Click()

   Результат.Text = Число1.Text + Число2.Text

End Sub

Запускаем проект. Вводим 3 и 2. Щелкаем по кнопке сложения. Результат есть. Но не совсем тот, что мы ожидали. Вместо 5 получилось 32. В чем причина? Дело в том, что Visual Basic привык считать знак + по отношению к содержимому текстовых полей не знаком сложения, а знаком "соединения". Проверьте. Вместо 3 и 2 введите Коро и бочка, в результате получится Коробочка. Недаром текстовые поля называются текстовыми, а не числовыми. То, что мы назвали их Число1 и Число2, делу никак не помогло, потому что Visual Basic не обращает внимания на смысл имен, для него имена - просто бессмысленные сочетания символов.

Что делать? Надо приказать Visual Basic обращаться в данном случае с содержимым текстовых полей не как с текстом, а как с числами. Для этого достаточно записывать их не в таком виде - Число1.Text и Число2.Text, а в таком - Val(Число1.Text) и Val(Число2.Text). Здесь Val  - сокращение от Value - величина, численное значение. Теперь наш оператор будет выглядеть так:

Результат.Text = Val(Число1.Text) + Val(Число2.Text)

Кстати, после ввода открывающей скобки Visual Basic услужливо предложит подсказку на тему о том, что должно быть в скобках. Со временем вы научитесь эту подсказку понимать.

Запускаем проект. Вводим два любых целых числа  и убеждаемся, что все складывается правильно.

Аналогично программируем три остальные кнопки. Вот как будет выглядеть после этого окно кода:

Private Sub Кл_сложения_Click()

   Результат.Text = Val(Число1.Text) + Val(Число2.Text)

End Sub

__________________________________________________

Private Sub Кл_вычитания_Click()

   Результат.Text = Val(Число1.Text) - Val(Число2.Text)

End Sub

__________________________________________________

Private Sub Кл_умножения_Click()

   Результат.Text = Val(Число1.Text) * Val(Число2.Text)

End Sub

__________________________________________________

Private Sub Кл_деления_Click()

   Результат.Text = Val(Число1.Text) / Val(Число2.Text)

End Sub

Пояснения: В языках программирования умножение обозначается звездочкой  *, а деление - косой чертой  /.

При вводе в текстовые поля десятичных дробей вместо запятой ставьте точку. Результат же будет выводиться с запятой.

Итак, калькулятор готов!

Предостережения: Наш калькулятор пока не защищен от ввода вместо чисел всякой ерунды (например, текста КУ-КУ), от ввода слишком больших или слишком маленьких чисел, от деления на ноль. В таких случаях Visual Basic дает неправильный или неудобочитаемый результат или сообщение об ошибке. Защиту вы найдете в .

Задание 1 Создайте кнопку возведения в квадрат числа из верхнего текстового поля. Указание: Возвести в квадрат - значит умножить само на себя.

Задание 2 На нашем калькуляторе не хватает кнопки СБРОС, которая опустошала бы все три текстовых поля. Создайте ее. Указание: Для этого вам понадобятся операторы типа   Число1.Text = "". В программах текстовое содержимое текстовых полей должно указываться в кавычках. В данном случае у нас внутри кавычек пусто, что и требовалось.

  1.  Кое-какие другие свойства объектов

Начнем в режиме проектирования украшать и усовершенствовать наш калькулятор.  Для этого рассмотрим некоторые другие свойства объектов, из которых он сконструирован. Многие из этих свойств имеются у большинства объектов, некоторые - только у одного-двух. Прочтя материал об очередном свойстве, вам надлежит тут же проверить, как его различные значения влияют на вид и поведение формы, кнопок, текстовых полей и меток в режиме [run].

Полезный совет: У объектов очень много не объясненных мной свойств. Природная любознательность толкнет вас "поперед батьки" разобраться, что они значат, придавая им для этого наугад какие-нибудь значения. Нет проблем - ломайте голову на здоровье. Проблема же в том, что кое-кто норовит сохранить проект с измененными значениями неведомых свойств. А потом проект начинает себя вести как-то непонятно. Мораль - "Верни, как было!"

BackColor (цвет объекта) - знакомое свойство. Щелкнем по нему. В поле значения появилась кнопочка с черной треугольной стрелкой. Щелкнем по ней - перед нами появилось окно с двумя закладками. Выберем Palette (палитра) и понравившийся цвет.  

ForeColor (цвет текста и линий, рисуемых на объекте).

Appearance (внешний вид) - 3D (трехмерный) или Flat (плоский).

BorderStyle (стиль границы). Здесь 6 вариантов, и заведуют они не только стилем границы, но и количеством кнопок на форме, и возможностью изменять размеры формы в режиме [run].

ToolTipText (всплывающая подсказка). Вы, возможно, привыкли к тому, что когда во время работы в приложениях Windows, таких как Word, вы помещаете курсор мыши на значок какого-нибудь инструмента, то рядом со значком появляется подсказка, поясняющая, зачем этот инструмент нужен.

Введите любой текст в качестве значения свойства ToolTipText. Запустите проект. Поместите курсор мыши на объект. Текст  всплыл. Очень приятное свойство.

MouseIcon, MousePointer (значок мыши, указатель мыши). Эти свойства позволяют вам менять внешний вид мышиного курсора. Выберите кнопку и задайте для ее свойства MousePointer значение 2 (крест). Запустите проект. Поместите курсор мыши на объект. Курсор приобрел вид креста.

Если вы зададите вид мышиного курсора для объекта Форма, то он будет иметь заданный вид над всей поверхностью формы и теми объектами на форме, для которых он еще не изменен.

Всего у свойства MousePointer 16 скромных значений. MouseIcon позволяет вам задать более живописный значок для курсора. Для этого предварительно установите значение MousePointer в 99. Затем щелкните по троеточию в MouseIcon и в открывшемся окне проводника найдите значки мышиного курсора в папке Windows\Cursors  или в папках Cursors и Icons, расположенных в папке Graphics, которая сама расположена в папке, куда установлен ваш Visual Basic.

Поиграли со значками мышиного курсора? А теперь верните все, как было. Не стоит без дела отвыкать от стандартного интерфейса - это рассеивает внимание. Экзотика хороша в экзотических случаях.

Следующие четыре свойства применимы только к форме.

MaxButton (кнопка максимизации - квадратик в правом верхнем углу формы). Сейчас значение этого свойства - True (Правда). Если установить его в False (Ложь), то квадратик пропадет или станет недоступен.

MinButton (кнопка минимизации - горизонтальная черточка в правом верхнем углу формы). Сейчас значение этого свойства - True (Правда). Если установить его в False (Ложь), то черточка пропадет или станет недоступна.

Moveable (можно ли двигать). Установите это свойство в False и вы  увидите, что в режиме [run] форму нельзя таскать по экрану за заголовок. Хотя можно перетаскивать ее границы.

WindowState определяет, в каком виде возникает форма при запуске проекта: 0 - в нормальном, 1 - в минимизированном (то есть вы найдете ее на панели задач Windows) или 2 - максимизированном (во весь экран).

Visible (видимый). Обычно значение этого свойства - True (Правда). Если установить его в False (Ложь), то элемент управления перестанет быть виден в режиме работы. Но будет слушаться программу.

Enabled (в рабочем состоянии). Обычно значение этого свойства - True. Если установить его в False, то элемент управления виден будет, но он не будет работать и им нельзя будет пользоваться. Обычно он приобретает при этом бледно-серый оттенок.

Alignment. В зависимости от значения этого свойства текст в текстовом окне или метке будет располагаться вплотную к левому краю элемента, правому краю или по центру.

MultiLine. Если установить это свойство текстового поля в True, то в текстовое поле вы сможете вводить не одну, а много строк. А если вы измените значение его свойства ScrollBars, то снабдите текстовое поле одной или двумя полосами прокрутки.

  1.  Помещаем фото на калькулятор

Мы хотим, чтобы поверхность формы была покрыта какой-нибудь фотографией. Для этого необходимо, чтобы файл с этой фотографией уже хранился на жестком диске вашего компьютера. Если фото нет, то сойдет и рисунок, созданный вами в каком-нибудь графическом редакторе, например, в Paint.

Выделите форму. Найдите свойство Picture. Затем щелкните по троеточию. В открывшемся окне проводника доберитесь до нужного вам графического файла. Щелкните по Open - в результате фото окажется на форме. Можно использовать и другие типы графических изображений (см.). Если у вас установлен Microsoft Office, то вы можете в его папке найти папку Clipart и там поискать файлы векторной графики.

Если вам не хочется занимать под фото все пространство формы, вы можете поместить на форму один из двух новых для вас элементов управления - PictureBox или Image - и аналогичным образом поместить изображение в них.

Графику можно поместить и на кнопку (предварительно установив свойство Style кнопки в Graphical).

  1.  Музыка в проекте 

Если у вашего компьютера есть звуковая карта, то вы можете добавлять в ваш проект самые разнообразные музыкальные и звуковые эффекты.

Сделаем так, чтобы при запуске проекта раздавалась музыка (а если вы умеете с микрофона записывать свой голос в файл - то и ваш голос). Звуковой файл с музыкой или вашим голосом уже должен находиться на жестком диске или на компакт-диске. Вы можете прекрасно прослушивать файлы в форматах MID, WAV, а в большинстве случаев и MP3 и некоторых других. Кстати, в Интернете и на компьютерных компакт-дисках подавляющая часть музыки имеет формат MP3. Этот формат становится все более популярным, так как позволяет уместить на диск в десять раз больше музыки, чем, скажем, WAV. Если вы не знаете ни одного звукового файла, то могу подсказать, что несколько десятков их хранятся в вашем компьютере по адресу C:\Windows\Media. Пусть мы хотим воспроизвести один из них - файл Canyon.mid.

Проверьте настройки вашей звуковой карты в программе «Микшер». Для этого в среде Windows нажмите Пуск Программы Стандартные Развлечения Регулятор громкости. В возникшем окне снимите флажки (галочки) выключения канала и установите максимальный уровень у каналов Wave (для WAV-файлов и MP3-файлов) и MIDI (для MID-файлов и RMI-файлов). Для работы с микрофоном зайдите в «Свойства», затем в закладку «Запись», установите флажок включения канала и установите максимальный уровень у канала «Микрофон».

Чтобы воспользоваться звуковым файлом, вам нужно расположить на форме элемент управления Microsoft Multimedia Control 6.0. Но его нет в стандартном наборе на панели Toolbox. Сначала его нужно туда поместить. Для этого: Projects Components вы находите его в длинном списке и ставите против него галочкуOK. Он появился в Toolbox. Теперь им можно пользоваться обычным образом.

Поместим его на форму. Дадим ему имя (например, Плеер). Вы видите, что у него есть клавиши. Чтобы все нужные вам клавиши были работоспособны в режиме [run], установите соответствующие свойства в окне свойств, но проще так: щелкните по Плееру правой клавишей мыши Properties Controls поставьте по две галочки против каждой нужной вам клавиши.

Для того, чтобы музыка зазвучала, Visual Basic должен выполнить следующие операторы:

Плеер.DeviceType = "Sequencer"

Плеер.FileName = "c:\Windows\Media\Canyon.mid"

Плеер.Command = "Open"

Плеер.Command = "Play"

Пояснения: Первая строка выбирает тип устройства (DeviceType) внутри вашей звуковой карты, которое будет проигрывать ваш звуковой файл. Для файлов с расширением mid, rmi используется устройство Sequencer. Для файлов с расширением wav, mp3 используется устройство WaveAudio.

Вторая строка объясняет компьютеру, откуда брать звуковой файл.

Третья строка дает команду (Command) на открытие (Open) файла. Это необходимо для дальнейшей работы с ним.

Четвертая строка дает команду на начало воспроизведения (Play) файла и вы слышите музыку.

Мы привыкли, что все, что ни происходит в проекте, происходит при нажатии кнопок. Потому что все процедуры, которые мы писали до этого, объясняли компьютеру, как реагировать на одно-единственное событие - щелчок мышкой по кнопке. Как сделать, чтобы вышеприведенные 4 оператора выполнялись сразу же при запуске проекта без нажатия каких бы то ни было кнопок? Существуют ли какие-либо другие события, не сводящиеся к щелчкам мыши? Да, и их много (например, нажатие клавиши на клавиатуре или факт изменения текста в текстовом поле). Но мы их раньше не замечали, так как Visual Basic на них никак не реагировал. Одно из них - загрузка формы (Form_Load) - наступает автоматически при запуске проекта (конечно, если вы этому специально не воспрепятствуете) и кроме всего прочего имеет следствием появление формы на экране. Оно-то нам и нужно.

Сделаем двойной щелчок по форме. Возникнет заготовка новой процедуры:

Private Sub Form_Load()

End Sub

Ее заголовок можно вольно перевести так: "Что делать, когда загружена форма", а для нас это фактически означает "Что делать, когда запущен проект". Естественно, в эту процедуру мы записываем наши 4 оператора. Музыка готова. Пока не запускайте проект.

Если вы хотите, чтобы ваше музыкальное сопровождение правильно работало, нужно позаботиться, чтобы звуковой файл после окончания воспроизведения своевременно закрывался командой "Close". В нашем случае других звуковых файлов не используется, поэтому закрытие файла можно отложить на самый последний момент - момент завершения работы проекта. С ним связано событие Form_Terminate. Вот ваши следующие три строки:

Private Sub Form_Terminate()

Плеер.Command = "Close"

End Sub

Помните, что событие Form_Terminate наступает только тогда, когда мы завершаем работу проекта, щелкнув по крестику в правом верхнем углу формы, а не кнопкой End на панели инструментов.

Проверьте, как работает наша музыка, запустив проект.

Музыка в кнопках

Поставим задачу - сделать так, чтобы при нажатии на калькуляторе каждой из четырех клавиш арифметических действий раздавался какой-нибудь короткий мелодичный звук, причем для каждой клавиши свой. Таких звуков много по адресу C:\Windows\Media. Там они записаны в файлах, имеющих расширение wav. Выберем из них Chime.wav, Notify.wav, Tada.wav и Logoff.wav.

Разместим в проекте еще один элемент Microsoft Multimedia Control 6.0. Дадим ему имя Звук. Его клавиши нам не нужны, нам ни к чему управлять короткими звуками. А раз так, то сделаем объект Звук невидимым. Для этого его свойству Visible придадим значение False.

Устройством для воспроизведения Wav-файлов  является WaveAudio. Чем раньше мы объясним это компьютеру, тем лучше. Поэтому поместим соответствующий оператор .

Звук.DeviceType = "WaveAudio"

в процедуру, которая выполняется раньше всех - в Form_Load.

В каждую из четырех процедур кнопок поместим четыре новых оператора следующего вида:

Звук.FileName = "c:\Windows\Media\……….wav"

Звук.Command = "Open"

Звук.Command = "Sound"

Звук.Command = "Close"

Пояснения: В нашем случае команда "Sound" имеет то же действие, что и команда "Play", но отличается от нее тем, что задерживает выполнение остальных операторов проекта до тех пор, пока не закончится воспроизведение звукового файла. Вы можете убедиться в этом, когда запустите готовый проект. Пока при помощи команды "Play" воспроизводится длинная мелодия Canyon.mid, вы можете спокойно пользоваться калькулятором, нажимая на кнопки. Когда же при помощи команды "Sound" воспроизводится звук Chimes.wav, весь проект ненадолго "замерзает".

Замечание: Если ваша звуковая карта достаточно хорошего качества, то вы сможете одновременно услышать и Canyon.mid и Wav-файлы.

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

Private Sub Кл_сложения_Click()

   Звук.FileName = "c:\Windows\Media\Chimes.wav"

   Звук.Command = "Open"

   Звук.Command = "Sound"

   Звук.Command = "Close"

   Результат.Text = Val(Число1.Text) + Val(Число2.Text)

End Sub

Private Sub Кл_вычитания_Click()

   Звук.FileName = "c:\Windows\Media\Notify.wav"

   Звук.Command = "Open"

   Звук.Command = "Sound"

   Звук.Command = "Close"

   Результат.Text = Val(Число1.Text) - Val(Число2.Text)

End Sub

………………………………………………

………………………………………………

Private Sub Form_Load()

   Звук.DeviceType = "WaveAudio"

   Плеер.DeviceType = "Sequencer"

   Плеер.FileName = "c:\Windows\Media\Canyon.mid"

   Плеер.Command = "Open"

   Плеер.Command = "Play"

End Sub

Private Sub Form_Terminate()

   Плеер.Command = "Close"

End Sub

Проигрывание аудиодисков

Элемент управления Microsoft Multimedia Control 6.0 можно использовать и для проигрывания из вашего проекта самых обычных некомпьютерных аудио-компакт-дисков. Разместите этот элемент управления на форме, придайте ему имя "CDPlayer". Вставьте диск в дисковод CD-ROM вашего компьютера. Теперь вам достаточно выполнить такую цепочку операторов:

CDPlayer.DeviceType = "CDAudio"

CDPlayer.Command = "Open"

CDPlayer.Command = "Play"

Вы скажете - Я могу это делать и безо всякого Visual Basic. Это верно. Но из Visual Basic это делать интереснее. В элементе Microsoft Multimedia Control 6.0 имеются возможности тонкого управления проигрыванием, которые вы не найдете в стандартных проигрывателях.

Плеер ваших любимых хитов

Если у вас набралось на диске 5-6 любимых звуковых файлов, то вы уже можете создать проект - плеер, в котором будет соответственно 5-6 кнопок с названиями исполняемых произведений. При нажатии кнопки звучит соответствующее произведение.

Вы можете сделать так, чтобы на форме тут же появлялась и подходящая картинка. Например, если исполняется песня группы "Столбняк", то пусть на форме появляется фотография задумчивых исполнителей этой группы. Для появления картинки подойдет оператор вида

Form1.Picture = LoadPicture("C:\Program Files\Microsoft Office\Clipart\Popular\Agree.wmf")

Здесь LoadPicture означает Загрузить картинку. В скобках с кавычками указывается адрес картинки на вашем компьютере. Кстати, в указанной папке вы найдете несколько десятков картинок.

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

Label1.Caption = "Композитор - Гладков. Впервые исполнена в 1970 году."

При работе со звуковыми файлами возникает вопрос - когда закрывать файлы? Если перед открытием следующего файла не закрыть предыдущий, то нормальной работы не получится. Связка

Плеер.Command = "Play"

Плеер.Command = "Close"

не подойдет, так как музыка закончится, не успев начаться. Здесь подойдет такая связка:

Плеер.Command = "Close"

Плеер.FileName = "c:\Windows\Media\Canyon.mid"

Плеер.Command = "Open"

Плеер.Command = "Play"

Здесь команда "Close" выполняется самой первой и закрывает любой файл, который исполнялся или мог исполняться раньше. После этого команда "Open" спокойно открывает нужный файл.

Задание 3: Создайте только-что описанный мною "Плеер ваших любимых хитов".

Задание 4 "Ваш собственный музыкальный компакт-диск":   Сейчас широко распространены в продаже компьютерные компакт-диски такого рода: вы вставляете его в компьютер, он инсталлирует свою программу, затем вы запускаете ее. На экране появляются красочная заставка типа "Ваши любимые песни" и список песен. Вы выбираете одну из них. Песня звучит, возникают подходящие фото и текст. В любой момент вы можете прервать песню и выбрать другую.

Если у вас или у вашего друга есть устройство записи на компакт-диски CD-RW, то вы вполне можете создать свой собственный компакт-диск, который будет делать то же самое. На диске будут находиться как сами файлы песен, так и инсталляционный пакет программы для их воспроизведения. Вам нужно где-то достать файлы песен, а также, перелистав эту книгу вперед, прочесть в , как переносить свою программу на другие компьютеры. В остальном вам достаточно знания предыдущего материала и советов из предыдущей задачи.

  1.  Система координат

Чтобы рисовать фигуры, чтобы помещать объекты в нужное место экрана или формы, чтобы при анимации двигать объекты в нужном направлении, вы должны уметь объяснить компьютеру, где, в каком месте экрана или формы вы хотите нарисовать фигуру или поместить объект. Сделать это можно только имея представление о системе координат.

Если вы еще не знаете, что такое система координат, то все же постарайтесь изучить этот раздел, без него дальше будет трудно.

В школе вы привыкли к такой системе координат:

На экране компьютера применяется такая:

Как видите, ось у направлена вниз. Это не очень привычно. Если вас это раздражает, то Visual Basic может вам предложить исправить ситуацию. Однако, редко кто пользуется этой возможностью, поэтому и вам будет полезно привыкнуть к компьютерной системе.

Как нам управлять положением объектов на экране? Выделите любой объект на форме и загляните в его свойства Left и Top.

Значение свойства Left - это расстояние левого края объекта от левого края формы.

Значение свойства Top - это расстояние верхнего края объекта от верхнего края формы.

Таким образом, для объектов на форме действует компьютерная система координат с началом в верхнем левом углу формы. Убедитесь в этом - потаскайте любой объект по форме, следя за значениями Left и Top. Добейтесь:

  •  нуля в одном свойстве
  •  нуля в другом свойстве
  •  нуля в обоих свойствах
  •  максимума в одном свойстве
  •  максимума в другом свойстве
  •  максимума в обоих свойствах
  •  минуса в одном свойстве
  •  минуса в другом свойстве
  •  минуса в обоих свойствах

Единицей измерения расстояния в Visual Basic является твип. Это очень маленькая величина и на пространстве экрана ее нельзя однозначно выразить в долях миллиметра. Ее значение зависит от разрешающей способности видеорежима. В твипах выражаются свойства Left, Top, Width (ширина объекта) и Height (высота объекта). Потаскайте правую и нижнюю границы объекта, следя за значениями Width и Height.

В режиме проектирования мы не можем таскать форму по экрану за заголовок, да это и не нужно.  Изменяя свойства Left и Top формы, мы управляем местом ее появления на экране после запуска проекта. Для формы начало компьютерной системы координат находится в левом верхнем углу экрана

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

Form1.Left = 2000

Похвальное дело снабжения нашего калькулятора различными "приколами" я вывожу в задание для самостоятельной работы:

Задание 5:  Пусть при нажатии на клавишу вычитания эта клавиша прыгает куда-нибудь совсем в другое место калькулятора и на ней вместо минуса появляется текст типа "Я устала вычитать" или "Не трогай меня - я нервная!". Когда это у вас получится, сделайте так, чтобы при нажатии на клавишу СБРОС клавиша вычитания скромно возвращалась на место и принимала свой прежний вид.

  1.  Вывод сообщений - MsgBox 

Можно заставить компьютер в любой момент выполнения программы выводить нам какое-нибудь сообщение. Например, пусть калькулятор при завершении работы выдает такое окно сообщения:

Для этого подойдет такой новый для нас оператор:

MsgBox ("А теперь считайте в уме!")

Чтобы он выполнился именно при завершении работы, его нужно поместить в процедуру Form_Terminate.

Прочитав сообщение, щелкните ОК.

Более подробно об окнах сообщений написано в .

Вы не забыли, что все, мною сказанное, нужно проверять?

  1.  Меню пользователя

Какая же программа без своего меню! Нашему калькулятору оно, вроде бы, ни к чему, но, все равно, интересно и полезно сделать хотя бы простенькое. Пусть оно выглядит так:

Задачу поставим такую: Щелкнув по пункту "Настройка цвета", мы должны увидеть выпадающее меню из двух пунктов. Щелкнув по пункту "Синий" этого выпавшего меню, мы красим калькулятор в синий цвет, щелкнув по пункту "Красный" - в красный.

Щелкнув по пункту "О программе", мы вызываем сообщение с кратким описанием программы.

Нам предстоит создать меню, а затем заставить его работать.

Создаем меню. Чтобы его создать, достаточно в главном меню Visual Basic выбрать ToolsMenu Editor. Перед вами возникнет следующее диалоговое окно:

Начнем с настройки цвета. Введем в поле Caption текст "Настройка цвета". Это для того, чтобы пункт меню с этим текстом появился на форме. По мере ввода этот текст возникает и в поле, расположенном ниже.

Теперь придумаем этому пункту имя, например, пункт_меню_Настройка_цвета, и введем его в поле Name. Это чтобы пункт меню мог заработать. Если хотите вызывать этот пункт не только мышкой, но и с клавиатуры, выберите что-нибудь из списка Shortcut.

Щелкните по кнопке Next и займитесь пунктом "Синий", дав ему имя пункт_меню_Синий.

Щелкните по кнопке Next и займитесь пунктом "Красный", дав ему имя пункт_меню_Красный.

Щелкните по кнопке Next и займитесь пунктом "О программе", дав ему имя пункт_меню_О_программе.

В результате в окне возникает список из 4 пунктов:

Теперь нужно объяснить компьютеру, что пункты "Синий" и "Красный" входят внутрь пункта "Настройка цвета". Для этого выделим их по очереди и сдвинем направо кнопкой . Получается такая картинка: 

Если у вас что-то не получается, то вы все же можете добиться своего, используя все клавиши, показанные на картинке. Стрелки сдвигают выделенный пункт меню, Delete удаляет, Insert вставляет новый пункт.

Все в порядке - внешний вид меню готов. Запустите проект. Вы видите, что меню желаемого вида появилось на калькуляторе. Пощелкайте по пунктам. Естественно, ничего не происходит. Для того, чтобы происходило, нужно заставить меню работать, а для этого нужно для каждого пункта написать свою процедуру.

Заставляем меню работать. В режиме проектирования выберем пункт меню "Синий" и щелкнем по нему. В окне кода появляется заготовка процедуры:

Private Sub пункт_меню_Синий_Click()

End Sub

Вы уже наверняка догадались, что это приглашение объяснить компьютеру, что нужно делать при выборе пункта "Синий". Для этого подойдет парочка операторов:

Form1.Picture = LoadPicture()

Form1.BackColor = vbBlue

Второй оператор красит форму в синий цвет, первый убирает с формы картинку, если она там была (сравните с материалом перед заданием 3 из ).

Аналогично программируем пункт "Красный". А сообщение о программе обеспечит оператор

MsgBox ("Программа создана в 2000 году")

Запустите проект и проверьте, как он работает.

Средствами Visual Basic можно создавать, преобразовывать и уничтожать меню не только в режиме проектирования, но и в режиме работы. Кроме обычных меню Visual Basic умеет создавать и так называемые контекстные меню (что это такое, рассказано в ). Ни на том, ни на другом я не буду останавливаться.

  1.  Кино в проекте

Все есть у нашего калькулятора - и картинки, и звук, и меню, и прыгающие кнопки. Для полного счастья не хватает кино. Нет проблем! Причем их нет двумя способами!

Первый способ. ProjectComponentsMicrosoft Windows Common Controls-2 6.0. На Toolbox появится несколько новых элементов управления.  Берите из них Animation и размещайте на форме - это ваш экран для кино. Его имя - Animation1. Этот элемент управления позволяет прямо в работающем проекте просматривать видеофайлы в формате AVI. Если у вас на компьютере нет порядочного кино в этом формате, то несколько маленьких анимационных роликов вы все-таки найдете в папке Videos, находящейся внутри папки, куда устанавливалась ваша Visual Studio. Скорее всего они находятся по такому адресу: "C:\Program Files\Microsoft Visual Studio\Common\Graphics\Videos".

Сделайте в проекте кнопку и назовите ее, например, "Видео". Вот процедура, которая при нажатии кнопки "Видео" бесконечно воспроизводит видеоролик  FILECOPY.AVI:

Private Sub Видео_Click()

   Animation1.Open "C:\Program Files\Microsoft Visual Studio\Common\Graphics\Videos\FILECOPY.AVI"

   Animation1.Play

End Sub

Здесь полная аналогия с аудиоплеером, который я рассматривал в   Первая строка процедуры открывает файл, вторая его воспроизводит.

Во время демонстрации вы можете выполнять на калькуляторе другие свои дела. Чтобы "заморозить" демонстрацию, нужно выполнить оператор Animation1.Stop, а чтобы совсем прекратить и убрать с экрана - Animation1.Close.

Если вам нужно 3 раза воспроизвести кадры видеофильма с 5 по 12, вы пишете

Animation1.Play  3, 5, 12

Второй способ. Используйте нашего старого знакомого - мастера на все руки - Microsoft Multimedia Control 6.0, который тоже позволяет просматривать видеофайлы в формате AVI. Разместите его на форме и назовите, скажем, "Кино". Вот цепочка операторов, приводящая к результату:

Кино.DeviceType = "AVIVideo"

Кино.FileName = "C:\Program Files\Microsoft Visual Studio\Common\Graphics\Videos\ FILECOPY.AVI"

Кино.Command = "Open"

Кино.Command = "Play"

Просмотр идет в отдельном окне, размер и положение которого вы можете мышкой менять в процессе просмотра, что само по себе любопытно. К тому же, вы можете пользоваться управляющими кнопками элемента управления.

  1.  Кое-что необходимое напоследок

Комментарии

Комментарии - это пояснения к тексту программы. Зачем они нужны?

Когда человек со стороны посмотрит на вашу программу, например, на эту (из калькулятора):

Private Sub Кл_сложения_Click()

   Звук.FileName = "c:\Windows\Media\Chimes.wav"

   Звук.Command = "Open"

   Звук.Command = "Sound"

   Звук.Command = "Close"

   Результат.Text = Val(Число1.Text) + Val(Число2.Text)

End Sub

он вряд ли поймет, в чем здесь смысл и для какой задачи программа написана. Если Звук, то при чем здесь сложение? Да и все остальное… Ну да ладно, это полбеды, а беда в том, что если через пару лет вам срочно понадобится самому разобраться в этой старой своей программе (так как ее выдвинули на Мобилевскую премию), а вы за это время ни разу не работали со звуком, то вы сами не сможете ничего понять, так как все забыли!

Любой профессиональный программист знает две вещи. Первое - любая старая программа через год забывается напрочь. Второе - почти любая старая программа или ее часть через полтора года бывает вдруг позарез нужна как исходный материал для новой программы и поэтому в ней надо срочно разобраться. Наученный горьким опытом, программист снабжает многие строчки кода собственными комментариями. Получается вот что:

   'Процедура, которая объясняет компьютеру, что ему делать, если мы щелкнули

   'по клавише сложения калькулятора, а именно: проиграть короткую мелодию

   'Chimes.wav на объекте с именем Звук, а затем сложить два числа.

Private Sub Кл_сложения_Click()     

   Звук.FileName = "c:\Windows\Media\Chimes.wav"  'Указываем адрес звукового файла на диске.

   Звук.Command = "Open"        'Перед проигрыванием файл нужно обязательно открыть.

   Звук.Command = "Sound"        'Включить воспроизведение.

   Звук.Command = "Close"        'После проигрывания файл нужно обязательно закрыть.

   Результат.Text = Val(Число1.Text) + Val(Число2.Text)  'Склалываем числа, причем Val преобразует текст в число

End Sub

Компьютеру комментарий не нужен, он его не поймет, а если начнет понимать, то ничего хорошего из этого не выйдет. Так что заглядывать в него компьютеру не нужно. И чтобы ясно показать компьютеру, куда ему не надо заглядывать, программист в каждой строке кода перед комментарием ставит одинарную кавычку. Visual Basic, выполняя очередную строку кода, просматривает ее слева направо, и как только наткнется на кавычку, правее уже не глядит.

Перенос длинного оператора на следующую строку

Иногда оператор получается такой длинный, что не умещается на экране. Это не беда - в окне кода он уместится, так как окно гораздо шире экрана, надо только его прокрутить. Но все равно неприятно, прокручивать не хочется. Оператор можно перенести на другую строку комбинацией пробела и подчеркивания. Например, вместо

Результат.Text = Val(Число1.Text) + Val(Число2.Text)

можно записать

Результат.Text = Val(Число1.Text)  _

+ Val(Число2.Text)

или

Результат.Text =  _

     Val(Число1.Text)  _

+ Val(Число2.Text)

Как видите, в конце строк стоит пара символов - пробел и за ним знак подчеркивания.

Запись нескольких операторов в одной строке

Visual Basic допускает писать в одной строке несколько операторов, разделяя их двоеточиями, вот так:

Звук.Command = "Open"     :     Звук.Command = "Sound"      :     Звук.Command = "Close"

Это приятно экономит место по вертикали экрана.

Превращаем наш калькулятор в независимую программу

В Windows вы привыкли запускать игры и другие программы двумя способами: щелкнув по значку программы на рабочем столе Windows (или в папке или в проводнике) или выбрав программу в стартовом меню на панели задач. Наш калькулятор запускается пока только из Visual Basic, что, возможно, уязвляет вашу гордость. Что ж, превратим его в независимую программу, которая будет запускаться, как и все, без запуска Visual Basic.

Для этого - FileMake Project1.exe. Затем в открывшемся окне выбираем папку, где будет сохранен будущий файл нашей независимой программы, и задаем ему имя (скажем, Суперкалькулятор). Затем ОК - и ваш файл Суперкалькулятор.exe готов. Если вы в качестве папки сохранения файла выберете   c:\Windows\Рабочий стол,  то ваш калькулятор расположится на рабочем столе Windows, а если вы ярлык этого файла (ярлыков мы не проходили) поместите в папку c:\Windows\Главное меню\Программы\Стандартные,  то он будет красоваться в запускающем меню рядом со стандартным калькулятором Windows (это все равно, что сидеть с Биллом Гейтсом в одном Мерседесе).

Однако, если вы попытаетесь скопировать ваш Суперкалькулятор.exe на другой компьютер и там его запустить, то вас может ждать неудача. Здесь нужны более сложные действия, чем я описал (см. ).

Как мы в дальнейшем улучшим наш калькулятор

  •  Предохраним его от деления на ноль и от прочих досадных ситуаций, описанных в .
  •  Снабдим его паролем, чтобы все, кому не лень, не могли наслаждаться его возможностями (то и другое см. в  ).
  •  Обеспечим привычный для глаз вид результатов (см. в    "Форматирование результатов").

Но для этого нужно знать переменные величины.


  1.  Работа в среде Visual Basic

В этой главе мы не будем программировать, мы будем учиться нажимать кнопки. Мы познакомимся с такими сторонами работы в среде Visual Basic, как инсталляция Visual Basic, сохранение проектов, работа с окнами и меню Visual Basic и т.п. Это всё необходимые моменты, но не все они необходимы вам именно сейчас. В любом случае прочитайте главу, а проверяйте лишь то, что вам покажется нужным.

Самые основы работы в среде Visual Basic уже изложены в первых двух главах на примере создания проектов. Кроме этого, значительную часть материала, относящуюся к работе в среде Visual Basic, мне показалось уместным изложить позже, в других местах книги. Вот эти места:

  •      - Пошаговый режим
  •      - Зацикливание
  •     -
  •      -
  •     -
  •     -
  •  

Все остальное, что мне показалось необходимым, изложено в этой главе.

  1.  Что нужно знать и уметь перед тем, как сесть за компьютер

Я постарался написать книгу так, чтобы сесть за компьютер и программировать на Visual Basic мог даже тот, кто ни разу за компьютер не садился. Специально для такого человека я написал Приложение, в котором объясняю все элементарные и необходимые для этого вещи: как устроен компьютер, какова структура папок на диске, как работать с текстом в текстовом редакторе, как управляться с окнами Windows. Если вы чувствуете пробелы хотя бы в одной из этих областей, то ни в коем случае не садитесь за компьютер и дальше не читайте, а читайте сначала Приложение.

Начнем, конечно, с инсталляции Visual Basic на ваш компьютер.

  1.  Инсталляция Visual Basic

Вообще-то, инсталляция - дело не для новичка. Но если рядом нет никого, кто мог бы вам помочь … В общем, смело вперед.  Вероятность того, что у вас получится, достаточно высока.

Чтобы работать с Visual Basic, он должен быть на вашем компьютере установлен (инсталлирован). Что такое установка программы, вы можете прочесть в .

Если вы не знаете, установлен ли Visual Basic на вашем компьютере, попробуйте запустить его из стартового меню, как это описано в . Если в стартовом меню его нет, то почти наверняка он не установлен. Есть более надежный способ проверки - посмотреть в Панель управления Windows, но для новичка это, пожалуй, опасно.

Чтобы установить Visual Basic, вам нужен компакт-диск. Во многих случаях Visual Basic продается на компакт-дисках не отдельно, а в составе пакета Microsoft Visual Studio, куда кроме Visual Basic входят средства программирования Visual C++ и Visual FoxPro.

Итак, у вас в руках компакт-диск (или пакет компакт-дисков) с надписью Visual Basic или Visual Studio. На разных компьютерах и разных операционных системах установка Visual Basic идет чуть-чуть по-разному. Однако, в подавляющем большинстве случаев она проходит именно так, как написано ниже.

Ваши действия:

  1.  Вставьте диск (или диск №1 из пакета) в дисковод CD-ROM. Для этого нужно сначала нажать на кнопку дисковода и подождать, когда из него выдвинется поднос для диска. Аккуратно установите диск на поднос блестящей стороной вниз. Старайтесь не дотрагиваться до блестящей поверхности пальцами. Снова нажмите на кнопку дисковода. Поднос вдвинется в дисковод, унося с собой диск. Здесь возможно одно из двух. Если автоматически запустится программа установки, то переходите к пункту 4. Если же через пару минут ничего не произошло, то читайте дальше.
  2.  Вам нужно добраться до файла Setup.exe на компакт-диске. Для этого зайдите в значок Мой компьютер на рабочем столе Windows и найдите в открывшемся окне значок дисковода CD-ROM. Щелкните по нему правой клавишей мыши и в открывшемся контекстном меню выберите пункт "Открыть". Перед вами откроется окно со списком папок и файлов компакт-диска.
  3.  Найдите в этом окне файл Setup.exe и запустите его на выполнение.
  4.  Начнет работу мастер инсталляции. Дальнейшие ваши действия задаются мастером. Ваше дело - отвечать на вопросы мастера и выбирать из предложенных вариантов. Здесь я прослежу установку Visual Basic из пакета Visual Studio 6.0. Установка Visual Basic с отдельного диска во многом аналогична, хоть и несколько покороче. Время от времени вам придется выполнять просьбу мастера вставить в дисковод другой диск.
  5.  Мастер предлагает вам общие сведения по установке. Прочтите их и нажмите кнопку Next.
  6.  Мастер спрашивает, согласны ли вы нести ответственность за незаконную установку Visual Studio. Если согласны, жмите I accept the agreement. Затем Next.
  7.  В диалоговом окне - три поля. В верхнее поле мастер предлагает ввести идентификационный номер устанавливаемого продукта. Его вам должен был сказать продавец. В другие два поля вы вводите свое имя и название своей фирмы. Можете ввести туда любую тарабарщину. Затем Next.
  8.  Из трех типов установки выбирайте Custom.
  9.  Мастер предлагает выбрать папку, в которую будут устанавливаться некоторые файлы программы. Новичкам рекомендую согласиться с его предложением. Next.
  10.  Жмите Continue.
  11.  Жмите OK.
  12.  Мастер предлагает вам компоненты Visual Studio для установки. Если вы не любите транжирить дисковое пространство, то поставьте флажки у следующих копонент:
  •  Microsoft Visual Basic
  •  Active X
  •  Data Access
  •  Graphics
  •  Tools

С остальных компонентов флажки снимите. Continue.

  1.  Мастер довольно долго копирует файлы с компакт-диска на жесткий диск, иногда задавая вам вопросы, смысла которых вы скорее всего не понимаете. Постарайтесь отвечать так, как рекомендует сам мастер.
  2.  После этого мастер предложит вам перезагрузиться (кнопка Windows Restart). Если у него самого не получится, то просто выключите компьютер, как положено, а затем включите.
  3.  После перезагрузки мастер может предложить вам установить еще несколько компонентов Visual Studio. Отказывайтесь. Вам это не скоро понадобится.
  4.  После окончания инсталляции можете вынуть компакт-диск.
    1.  Порядок работы над проектом в Visual Basic
  5.  Загрузите Visual Basic
  6.  Поработайте немного над проектом, то есть разместите на форме несколько элементов управления или запишите в окно кода несколько строк программы.
  7.  Сохраните проект на жестком диске
  8.  Запустите проект на выполнение (кнопкой Start или клавишей F5).

Если результаты вас удовлетворяют, перейдите к пункту 6

  1.  Исправьте ошибки в проекте (подробно об этом см. в )

Вернитесь к пункту 3

  1.  Добавьте на форму еще несколько элементов управления и допишите в окно кода еще несколько строк.

Вернитесь к пункту 3

Рассмотрим подробнее некоторые пункты этого алгоритма.

  1.  Загрузка Visual Basic и выход из него

Загрузка Visual Basic ничем не отличается от загрузки любой другой инсталлированной программы. Нажмите кнопку "Пуск" на панели задач. В открывшемся стартовом меню выберите последовательно пункты Программы  Microsoft Visual Studio  Microsoft Visual Basic.

Выход из Visual Basic совершенно такой же, как и из большинства других приложений Windows - щелчок мышкой по крестику в правом верхнем углу главного окна Visual Basic или File  Exit.

  1.  Сохранение проекта на диске. Загрузка проекта с диска

Итак, вы готовы запустить новый проект на выполнение. Во время выполнения может произойти неприятная вещь - Visual Basic может зависнуть. Это означает, что изображение на экране замрет, и никакими клавишами или мышкой вы не сможете вывести Visual Basic из ступора. Придется выходить из Visual Basic "аварийно" - при помощи клавиш Ctrl-Alt-Del. Поскольку ваш проект находится пока только на экране и в оперативной памяти, то при аварийном выходе из Visual Basic он пропадет и вам придется создавать его снова. Чтобы избежать лишней работы, вы должны перед выполнением проекта записать (сохранить) его на диск.

Для этого в меню File есть опция Save. Как только вы ее выберете, перед вами появится диалоговое окно:

В списке   Save in   компьютер предлагает вам выбрать папку, в которую вы хотели бы записать проект. В первый раз он предлагает вам ту папку, в которую сам установлен (на рисунке это папка VB98). Я ни в коем случае не рекомендую с этим соглашаться, так как в этом случае файлы вашего проекта будут перемешаны с рабочими файлами Visual Basic. Прежде чем порекомендовать, в какую папку вам следует сохранить свой проект, я расскажу вам, как, не выходя из нашего диалогового окна, путешествовать по папкам и дискам, как создавать папки и делать другие необходимые вещи.

В большом списке папок и файлов в середине диалогового окна вы видите содержимое папки, выбранной в списке Save in. Вы видите все папки и ни одного файла, хотя их там множество. Чтобы увидеть все файлы, что совершенно не обязательно, выберите в списке Save as type вариант All Files. В противном случае вы будете видеть кроме папок только файлы форм с расширением frm, о чем говорит предлагаемый вам вариант Form Files (*.frm).

Вы можете двойным щелчком мыши войти в любую из папок в большом списке. Тогда именно она появится в списке Save in, а в большом списке появится ее содержимое. Таким образом вы можете продвигаться вглубь папок, как внутрь матрешки. А как продвигаться наружу? Для этого есть кнопка . Щелчком по ней вы выйдете из папки, показанной в списке Save in, в папку, внутрь которой она входит. Еще щелчок - еще один шаг наружу. И так далее, пока не окажетесь на рабочем столе (Desktop), на котором расположены и значок Мой компьютер и другие значки. Если хотите опять добраться до дисков, войдите в Мой компьютер.

Щелкнув по черной треугольной стрелке в раскрывающемся списке Save in, вы раскроете список папок в виде части дерева, похожего на дерево Проводника Windows. Это позволит вам быстрее путешествовать по папкам.

Внутри папки, выбранной в списке Save in, вы можете создавать новые папки. Новая папка будет создана, если вы щелкнете по кнопке . Тут же вам нужно будет ввести с клавиатуры ее имя.

В приложениях Windows очень удобно пользоваться правой клавишей мыши. Каждый раз, когда вы хотите что-нибудь сделать с папкой, файлом или другим объектом на экране, но не знаете, на какие кнопки для этого нажимать, щелкните по этому объекту правой клавишей мыши. Немедленно из объекта выпадет так называемое контекстное меню, в котором перечислены самые популярные действия над этим объектом. Вам останется только выбрать. Новички! Будьте осторожны. Не выбирайте Cut (вырезать) или Delete (удалить).

Чтобы скопировать файл или папку в другое место, выберите в его контекстном меню опцию Copy (копировать). Затем доберитесь до папки, в которую хотите данный файл или папку скопировать, то есть добейтесь ее присутствия в списке Save in, и щелкните правой клавишей мыши по свободному пространству внутри большого списка папок и файлов. В открывшемся контекстном меню выберите Paste (вставить). Если вы хотите, чтобы копия находилась рядом с оригиналом, в список Save in заходить не нужно.

Чтобы переместить файл или папку в другое место, делайте все то же, что и при копировании, только вместо Copy выберите в контекстном меню опцию Cut (вырезать).

Чтобы переименовать файл или папку, выберите в контекстном меню опцию Rename (переименовать).

Итак, чтобы правильно сохраниться в первый раз, создайте внутри предлагаемой вам папки VB98 папку, в которой вы будете хранить все папки своих проектов, назовите ее как-нибудь, например, "Мои проекты". Затем зайдите в нее и создайте внутри нее папку для своего первого проекта. Затем зайдите в нее. В поле File Name компьютер предлагает вам имя для файла вашей формы - Form1.frm. Хотите - оставьте его неизменным, хотите - измените. Нажмите кнопку Save. Visual Basic сохранит файл формы и предложит вам сохранить главный файл вашего проекта. Причем под именем Project1.vbp. Сохраните и его под этим или другим именем.

Таким образом, ваш проект сохраняется в нескольких файлах.

После выполнения проект обычно исправляют и дополняют и перед следующим выполнением опять сохраняют: File  Save. Но в этот раз диалоговое окно не появляется. Visual Basic, ни о чем вас не спрашивая, стирает с диска весь ваш проект (в том виде, как он был сохранен в последний раз) и на его место записывает с тем же именем его исправленную и дополненную версию, то есть ту, что вы видите на экране. (На усмотрение программиста оставляется решить, а лучше ли новая версия старой и не жалко ли старой версии.) Так поступают все современные программные продукты.

Загрузка проекта с диска. Предположим, вы вчера сохранили свой проект, а сегодня хотите продолжить с ним работу. Вы включаете компьютер, запускаете Visual Basic, затем - File  Open. На экране появляется диалоговое окно, очень похожее на то, что появляется при сохранении проекта. И действия ваши очень похожи: вы должны отыскать в окне папку вашего сохраненного вчера проекта, для чего вам придется попутешествовать по папкам. Зайдя в папку, откройте главный файл вашего проекта. Ваш проект появляется на экране.

Если ваш новый проект делается на основе старого, то чтобы не начинать новый проект с нуля, откройте окно загрузки проекта, скопируйте папку старого проекта и делайте новый проект на основе копии старого. Скопировать папку можно и в Windows, не заходя в Visual Basic.

  1.  Окна среды Visual Basic

До сих пор я не рассматривал систематически окна и меню Visual Basic 6.0. И вы, наверное, уже столкнулись в связи с этим с некоторыми проблемами. Для дальнейшего движения вперед необходимо рассмотреть их более подробно.

Начнем с окон. Их в среде Visual Basic довольно много, ведут они себя, как и положено окнам Windows: налезают друг на друга, заслоняют друг друга, часто нужное окно вообще куда-то исчезает. В общем, нужен порядок. Если у вас нет минимального опыта управляться с окном Windows, читайте Приложение 2.

Сначала разберемся, какие окна есть вообще. Для этого посмотрите на рисунок в . Вот названия окон по-английски:

Object - это окно, имеющее у нас заголовок Project1 - Form1 (Form). Его назначение - служить вместилищем для формы. Саму форму в режиме проектирования двигать мы не можем, так хоть окно подвигаем.

Toolbox - вместилище элементов управления.

Code - окно кода. Сейчас нам нужно научиться заставлять Visual Basic выводить в окно кода заготовку процедуры для обработки любого события. Пока мы умеем только, щелкнув дважды мышкой по кнопке Command1, получить заготовку процедуры Command1_Click. Но с кнопкой связана масса событий, а не только щелчок мышью. Как написать процедуры для других событий?

Пусть в вашем проекте есть такие объекты: форма, Command1 и Text1. Все их вы найдете в списке, находящемся в левой верхней части окна кода, если щелкнете по черной стрелке, раскрывающей этот список. Пусть вам нужно написать процедуру для обработки двойного щелчка мышью (DblClick) по объекту Text1. Выбираете в упомянутом списке Text1, затем раскрываете список, находящийся справа от упомянутого, и находите в нем все события, связанные с Text1. Выбираете из них DblClick  - и в окне кода тут же возникает нужная вам заготовка:

Private Sub Text1_DblClick()

End Sub

Один момент: Если вы случайно щелкните по одной из двух маленьких кнопочек в левом нижнем углу окна кода, то часть процедур (или все они) куда-то пропадет. Щелкните по соседней кнопке.

Properties - окно свойств объекта.

Project Explorer - в этом окне мы видим структуру нашего проекта. Пока от него толку нет, так как у нас структура простая - одна форма и связанный с ней код. Сложные проекты могут состоять из многих форм  и других элементов, взаимосвязь которых удобно видеть в этом окне.

В верхней части окна Project Explorer можно видеть три кнопки. Левая и средняя из них удобны для быстрого переключения между формой и окном кода. Более подробно работа Project Explorer описана в .

Если какое-то из описанных выше или ниже окон не открыто, идите в пункт View главного меню, а затем щелкните по имени того окна, что вам нужно. Если окно открыто, но заслонено другими окнами, то идите в пункт Window главного меню, а затем щелкните по имени нужного окна. Со всеми этими окнами можно делать все, что допускает любое окно Windows.

Следующие окна на рисунке я не показал:

Form Layout - позволяет вручную задавать позицию формы на экране после запуска проекта.

Object Browser - делится на два вертикальных списка. В левом приведены типы (классы) объектов Visual Basic. Если выделить в нем какой-нибудь объект, например, TextBox, то в правом списке можно видеть свойства этого объекта, события, которые могут происходить с этим объектом, и так называемые методы (см. ), ему принадлежащие. Свойств здесь, между прочим, больше, чем в окне свойств, так как здесь приведены и те свойства, которые имеют смысл только в режиме [run]. Например, свойство SelText объекта TextBox, которое выдает фрагмент текста, выделенного нами в текстовом поле. Object Browser - довольно удобный способ увидеть, что "умеет" делать любой объект и что можно делать с ним.

Более подробно работа Object Browser описана в .

Color Palette - позволяет удобно раскрашивать объекты и текст в режиме проектирования.

Многие окна имеют привычку при сближении состыковываться, "склеиваться" между собой или "прилипать" к краям главного окна Visual Basic. Сделано это для удобства программистов, но поначалу может восприниматься, как неудобство. Вы можете отменить это свойство, зайдя в Tools  Options Docking и убрав оттуда флажки.

После запуска проекта ваша форма как бы отделяется от среды и "плавает" по экрану самостоятельно. При этом, если вы неосторожно щелкните мимо формы, то она может пропасть из виду, загороженная другими приложениями Windows, в том числе - главным окном Visual Basic. Чтобы она снова появилась, достаточно щелкнуть по ее значку на панели задач Windows.

  1.  Главное меню Visual Basic

А теперь рассмотрим все нужные вам на первых порах пункты главного меню среды. Для понимания дальнейшего отметим, что в среде можно одновременно работать с несколькими проектами. О том, зачем это нужно, написано в .

File

New Project. Удаляет из среды все открытые проекты и создает новый проект.

Open Project. Удаляет из среды все открытые проекты и открывает для работы один из проектов, сохраненных вами ранее.

Add Project. Если у вас в среде уже открыто несколько проектов, то добавляет к ним или новый или (если вы выберете закладки Existing или Recent) один из проектов, сохраненных вами ранее. Если ни одного проекта не открыто, то действует, как New Project или Open Project.

Remove Project. Удаляет из среды ваш проект, а если у вас открыто несколько, то один из них, а именно тот, что выделен в окне Project Explorer.

Save Project. Сохраняет ваш проект на диске.

Save Project As. Сохраняет на диске копию вашего проекта.

Print. Распечатывает программу или формы вашего проекта на принтере.

Print Setup. Настройка печати.

Make Project1.exe. Превращает ваш проект в исполняемый файл (см. ).

Ниже этих пунктов расположен удобный список для открытия проектов, которые вы открывали последними.

Exit. Выход из Visual Basic.

Edit

Undo. Отменить последние действия.

Redo. Вернуть отмененные действия.

Cut, Copy, Paste, Delete. Обычные и привычные для вас команды перемещения, копирования, удаления слов и фрагментов текста вашей программы. Применяются не только к тексту, но и к элементам управления на форме. Как проводят эти действия с текстом, рассказано в Приложении 2. А с элементами управления вот как. Часто, когда нам нужно иметь на форме несколько совершенно одинаково настроенных элементов управления, удобнее не брать их по-одиночке в Toolbox, а разместив один на форме и настроив его нужным образом, затем скопировать его. Копировать можно двумя способами:

  •  Щелчок по копируемому объекту  Copy  щелчок по форме  Paste.
  •  Щелчок по копируемому объекту правой клавишей мыши  пункт Copy в выпавшем контекстном меню  щелчок по форме правой клавишей мыши  пункт Paste в выпавшем контекстном меню.

Аналогично используются Cut (вырезать для переноса в другое место) и Delete (уничтожить).

Find, Find Next, Replace. Команды поиска и замены в тексте вашей программы отдельных слов и фрагментов.

View

Code, Object, Object Browser, Project Explorer, PropertiesWindow, Form Layout Window, Toolbox, Color Palette - это все названия окон среды Visual Basic, о которых речь была выше. Щелчок по любому из этих пунктов делает соответствующее окно видимым.

Immediate, Locals, Watch - окна, которые нужны для отладки проекта (см. ).

Project

Add Form- добавить форму. Ваша форма в режиме проектирования - это будущее окно в режиме [run]. Если вы выберете этот пункт, то в режиме проектирования у вас будет уже две формы. Это значит, что в режиме [run] вы сможете иметь два окна. Кстати, у каждой формы - свое окно кода, значит, окон кода у вас тоже два. Вы можете добавлять сколько угодно форм.  Более подробно работа работа с несколькими формами описана в .

Remove Form - удалить форму.

Components. Если вы щелкните по закладке Controls, то это пункт позволяет добавить в окно Toolbox нестандартные элементы управления. Если вы щелкните по закладке Insertable Objects, то сможете вставлять в форму окна других приложений Windows. Например, если у вас на компьютере установлен Word, то найдите в списке пункт Microsoft Word Document и поставьте галочку. В окне Toolbox у вас появится значок документа Word. Берите его как обычный инструмент и располагайте на форме. Теперь у вас на форме расположен документ Word и, не выходя из Visual Basic, вы сможете пользоваться многими возможностями Word как в режиме проектирования, так и в режиме [run]. Для этого достаточно сделать двойной щелчок мышкой по документу, размещенному вами на форме.

Format

Align, Make Same Size и другие - эти пункты имеют дело с размерами, формой и местоположением элементов управления на форме и друг относительно друга, то есть с тем, с чем вы и так прекрасно справляетесь безо всяких меню. Выделите один или несколько объектов на форме и попробуйте применить эти пункты, посмотрите, что получится. Чтобы выделить несколько объектов, щелкайте по ним при нажатой клавише Ctrl или обведите их рамочкой.

Order. Бывает, что в результате вашего проектирования формы некоторые элементы управления перекрываются другими. Для примера поместите на проект две большие кнопки так, чтобы одна частично закрывала другую. Тогда приобретает важность вопрос - какой из объектов ближе к вам, а какой дальше. Управлять этим вы можете, выбрав Bring to Front (выдвинуть на передний план) или Send to Back (задвинуть на задний план)

Lock Controls. Иногда неловким движением мыши вы можете сдвинуть или изменить размер объекта в тщательно созданном вами проекте. Чтобы этого не произошло, и нужен этот пункт. Объекты примерзнут к месту. Когда вы захотите их разморозить, снова выберите этот пункт.

Debug

Этот пункт нужен для отладки проекта и о нем особый разговор (см. ).

Run,   Query,   Diagram

Эти пункты меню мы не будем затрагивать.

Tools

Здесь находится Menu Editor, который применяется для создания меню в проекте (см. ). Но нам сейчас интересен не он, а пункт Options, который позволяет настраивать среду Visual Basic: Вот его закладки:

  •  Закладка Editor - здесь рекомендую установить все флажки, так как каждый из них обеспечивает те или иные удобства работы в окне кода. Особенно хочу подчеркнуть флажок Require Variable Declaration, который требует обязательного объявления переменных величин. Поле Tab Width регулирует отступ при нажатии клавиши Tab. 
  •  Закладка Editor Format - здесь вы можете настроить шрифт, размер шрифта, цвет шрифта и цвет фона в окне кода.
  •  Закладка General - здесь вы, изменяя числа в двух полях, можете настроить расстояние между линиями сетки на форме по горизонтали и вертикали. Флажок Align Controls to Grid требует, чтобы очертания элементов управления проходили только по линиям сетки. Убрав флажок Show Grid, вы сделаете линии сетки невидимыми. Остальные флажки оставьте установленными, переключатель не трогайте.
  •  Закладка Docking - Как я уже говорил, окна среды Visual Basic имеют привычку при сближении состыковываться, "склеиваться" между собой или "прилипать" к краям главного окна Visual Basic. Вы можете установить или отменить это свойство у каждого из окон, установив или убрав флажки.
  •  Закладка Environment  - Переключатель  When Visual Basic starts  определяет, будет ли Visual Basic при своей загрузке предлагать создать или открыть проект (Prompt for project) или без предупреждения создавать новый (Create default project). Переключатель   When a program starts   определяет, будет ли Visual Basic перед любым запуском проекта на выполнение автоматически сохранять несохраненный проект (Save Changes), предлагать сохранить проект (Prompt To Save Changes) или не сохранять (Don't Save Changes). Беспечным советую первое. Флажки должны быть везде установлены.
  •  Закладка Advanced - пока она нам не нужна.

Add-Ins

Здесь нам будет интересен Visual Data Manager, применяющийся для работы с базами данных. Разговор о нем - в .

Window

Мало чем отличается от аналогичного пункта в других приложениях Windows. Позволяет разными способами упорядочить сумятицу окон на экране или выдвинуть на передний план спрятавшееся окно.

Split  позволяет смотреть на ваш код через два окна, а не через одно, что бывает удобно, когда кода много.

Help

Когда вы пишете оператор на Visual Basic, вы должны, во-первых, понимать, что он означает и что означает каждая его часть, а во-вторых, вы должны знать правила его записи. Visual Basic чрезвычайно богат, в него входят тысячи элементов - свойств, событий и др. Невозможно запомнить смысл и правила записи каждого элемента. Вот здесь-то и нужен Help - система помощи, которая позволит вам быстро найти информацию по любому элементу. Если, конечно, вы знаете английский.

Если вы хотите узнать подробности о каком-то служебном слове, например, BackColor, вы щелчком мыши ставите на него текстовый курсор и нажимаете на клавиатуре клавишу F1.

Contents  представляет вам информацию в слегка систематизированном виде.

Index  удобен тогда, когда вы заранее знаете название элемента, который вас интересует (например, FileName).

Система помощи в Visual Basic 6.0 осуществляется через так называемую библиотеку MSDN (MSDN Library), которая инсталлируется или с отдельных компакт-дисков или входит в состав пакета Visual Studio.

Панель инструментов

Предназначена для быстрого доступа к популярным пунктам меню. Задержите мышку на любом значке панели - и он назовет себя. В правой части панели - две пары чисел. Это свойства Left, Top, Width и Height выделенного объекта.

Кроме главной панели инструментов в Visual Basic есть еще несколько. Добраться до них можно так: View Toolbars. Там вы найдете, в частности, панель Form Editor, при помощи которой вы сможете делать с элементами управления на форме многое из того, что делается в пункте Format главного меню, но быстрее. Также вам, возможно, пригодится панель Edit для работы с программным текстом в окне кода. Там же вы можете создать собственную панель инструментов или изменить стандартные.

  1.  Перенос вашего проекта на другие компьютеры

Когда ваш проект, например, Калькулятор, заработает на вашем компьютере, вам захочется, чтобы он заработал и на компьютерах ваших друзей. Но вот беда - на их компьютерах не установлен Visual Basic. Раньше для решения этой проблемы достаточно было создать исполняемый файл вашего проекта (назовем его Калькулятор.exe) и скопировать его на компьютер вашего друга. (Как создавать исполняемый файл, перечтите в .) Теперь не то. У новых версий Visual Basic гораздо более солидный и тяжелый подход к переносу программ с компьютера на компьютер. Не копировать, а инсталлировать - вот девиз!  В причины отказа от легкой жизни я не буду вдаваться, основная такая - Visual Basic слишком зависит от Windows, а на разных компьютерах Windows разные или настроены по-разному.

Если вы когда-нибудь инсталлировали какую-нибудь игру на компьютер, то что такое инсталляция знаете. Вот вы купили компакт-диск (или дискету) с понравившейся игрой или программой (пусть это будет Microsoft Office). Во многих случаях купленная программа просто так не запустится, нужна установка или по-другому инсталляция (от английского install - устанавливать). Говорят, что на диске находится не сама программа Microsoft Office, а инсталляционный пакет программы Microsoft Office, то есть набор файлов, в который в том числе входят в сжатом виде и файлы Microsoft Office. Вы находите в инсталляционном пакете программу установки (запускающий файл - Setup.exe) и запускаете ее. Все ваши дальнейшие действия диктуются этой программой. Фактически вам приходится только отвечать на ее вопросы. Например, вы отвечаете на вопрос, в какую папку жесткого диска вы желаете установить Microsoft Office. Программа установки разворачивает сжатые файлы Microsoft Office и копирует их на жесткий диск вашего компьютера. Кроме этого она настраивает Windows на работу с Microsoft Office. После окончания установки вы сможете запускать Microsoft Office из меню "Пуск" на панели задач Windows.

Во время установки игр вам, наверное, приходили в голову мысли о суперпрограммистах, которые мало того, что создают игру, они еще и сжимают файлы этой игры, переписывают их на компакт-диск и делают так, чтобы программа установки правильно установила ее на ваш компьютер. Сейчас я предлагаю вам стать таким "суперпрограммистом". Наша цель - через полчаса получить одну-две дискеты (а если у вас есть CD-RW - то компакт-диск) с инсталляционным пакетом, готовым к употреблению.

Первый этап - подготовка проекта

В вашей программе могут встретиться операторы типа

Плеер.FileName = "c:\Windows\Media\Canyon.mid"

или

Form1.Picture = LoadPicture("C:\Program Files\Microsoft Office\Clipart\Popular\Agree.wmf")

То есть в режиме работы ваш проект обращается к файлам, находящимся где-то далеко на диске. Вам никогда не приходило в голову, что будет, если кто-то, не подозревая, что эти файлы нужны вашей программе, сотрет их? Ничего хорошего не будет. А если вы к тому же предназначаете ваш проект для чужого компьютера, опасность и морока возрастают вдвойне.

Отсюда совет: Все такие файлы заранее скопируйте в папку вашего проекта, туда, где находятся файлы Project1.vbp и Form1.frm. По принципу "Все мое ношу с собой".  Соответственно вам придется переделать и адреса в приведенных выше операторах. Пусть папка вашего проекта находится по адресу  "c:\Проекты\Калькулятор". Тогда эти два оператора будут выглядеть так:

Плеер.FileName = " c:\Проекты\Калькулятор\Canyon.mid"

Form1.Picture = LoadPicture("c:\Проекты\Калькулятор\Agree.wmf")

Однако тут возникает еще одна проблема. Папку вашего проекта вы когда-нибудь можете захотеть перенести в другое место диска, от чего эти адреса сразу станут неправильными. Да и на чужом компьютере ваш проект наверняка попадет в папку с совсем другим адресом. В Visual Basic есть средство справиться с этой проблемой. Итак, вы скопировали файлы Canyon.mid и Agree.wmf  в папку вашего проекта. Теперь вам достаточно приведенные выше операторы переписать в следующем виде:

Плеер.FileName = App.Path  &  "\Canyon.mid"

Form1.Picture = LoadPicture (App.Path  &  "\Agree.wmf")

Имеется некий объект App, назначение которого - в любой момент выполнения проекта кое-что знать о нем, в частности, его свойство Path как раз имеет значение адреса выполняемого проекта "c:\Проекты\Калькулятор".

Картинки, которые вы загрузили в объекты на этапе проектирования, не нуждаются во всех этих усилиях, так как они уже неявно сохранены в одном из файлов в папке проекта.

Если вы хотите, чтобы исполняемый файл вашего проекта имел собственный значок в Windows, придайте в режиме проектирования значение свойству Icon вашей формы.

Рекомендую с самого начала разработки проекта сохранять его не под предлагаемым именем Project1.vbp, а под уникальным именем, например, Калькулятор.vbp.

Второй этап - компиляция проекта в исполняемый файл

Как это сделать, вкратце описано в . Напоминаю ваши действия: FileMake Project1.exe  на экране возникает окно Make Project  укажите имя исполняемого файла (Калькулятор.exe) и если хотите, выберите папку, куда он будет записан. Если не станете выбирать, он по умолчанию будет записан в папку проекта (что и рекомендую)  жмите ОК  файл готов.

Если исполняемый файл работает плохо, вам придется компилировать сначала. При этом в окне Make Project зайдите в Options Compile  и проверьте, чтобы был установлен флажок Compile to Native Code. Затем зайдите в Advanced Optimizatons и убедитесь, что ни один флажок не поставлен.

Третий этап - создание инсталляционного пакета

Выйдите теперь из Visual Basic в Windows. Инсталляционный (или дистрибутивный) пакет создается при помощи мастера  Package & Deployment Wizard, который должен был установиться на ваш компьютер при установке Visual Basic. Добираются до него через стартовое меню Windows. Там он находится недалеко от Visual Basic.

Мастером называется программа, позволяющая пользователю делать сложные вещи с минимальной затратой умственных сил. Обычно работа мастера состоит из нескольких шагов, на каждом из которых мастер задает пользователю вопросы. Переход к следующему шагу осуществляется кнопкой Next. Вернуться назад вы можете кнопкой Back.

Запустите мастер Package & Deployment Wizard. В появившемся окне мастера кнопкой Browse найдите файл вашего проекта Калькулятор.vbp и нажмите кнопку Package. Через несколько секунд работы в качестве следующего шага работы мастера появляется окно Package Type.

  •  Package Type. Некоторые шаги начинающие программисты могут без большого вреда пропустить. Такие шаги я объяснять не буду. Выделите верхнюю из двух строк. Теперь нажмите кнопку Next. Следующий шаг - окно Package Folder.
  •  Package Folder. Мастер спрашивает, в какую папку на вашем диске записывать весь дистрибутивный пакет. Рекомендую согласиться с предложением мастера, тогда он создаст внутри папки вашего проекта папку Package и запишет все в нее. Если вам это не нравится, жмите кнопку New Folder. Если нравится, нажмите кнопку Next. Мастер спросит, согласны ли вы на создание папки Package. Отвечайте Yes. Мастер перейдет к следующему шагу:
  •  Included Files. Здесь мастер показывает вам для вашего сведения список несжатых пока файлов, включаемых в инсталляционный пакет. Вы должны позаботиться о том, чтобы добавить в этот список загружаемые во время работы звуковые и другие файлы, речь о которых шла на первом этапе. Для этого нажмите кнопку Add. Поскольку в возникшем окне вам видны не все нужные файлы, настройте фильтр Files of type этого окна в значение All Files. Найдите теперь нужный файл и нажмите Open. Файл окажется в списке. Проделайте то же самое с остальными нужными файлами.   Next.
  •  Cab Options. Большинство файлов дистрибутивного пакета будут сжаты внутри так называемых CAB-файлов. Эти файлы могут быть довольно большими, поэтому мастер спрашивает вас, что делать - много маленьких (Multiple cabs) или один большой (Single cab). Если вы хотите создать дистрибутивный пакет на дискетах, то установите переключатель в положение Multiple cabs и выберите размер дискеты. Тогда CAB-файлы будут создаваться такого размера, чтобы умещаться на дискете. Если вас не волнует размер CAB-файла, то выберите Single cab.   Next.
  •  Installation Title. Мастер просит ввести заголовок устанавливаемой программы, который для вящей солидности будет крупным шрифтом отображаться на заднем плане в процессе инсталляции.   Next.
  •  Start Menu Items. Настройка стартового меню Windows - в каком его месте и под каким заголовком будет фигурировать ваша программа. Попробуйте разобраться сами. Или просто нажмите Next.
  •  Install Locations. Next.
  •  Shared Files.  Next.
  •  Finished!.  Finish.
  •  Вслед за этим покажется рапорт мастера о проделанной работе. Можете закрыть его, не читая.
  •  Можете закрыть окно мастера. Дистрибутивный пакет создан.

Находясь в Windows, загляните в папку проекта. Вы обнаружите в ней папку Package. Загляните в нее. Там вы увидите один или несколько CAB-файлов, в которые ужался и ваш проект, и некоторые неведомые вам файлы, необходимые для инсталляции и нормальной работы вашего проекта на чужом компьютере. Кроме CAB-файлов вы увидите файлы Setup.exe и SETUP.LST. Если вы хотите посмотреть на инсталляционные файлы в несжатом виде, загляните в папку Support, находящуюся в той же папке Package. Папка Support не входит в состав инсталляционного пакета. Инсталляционным пакетом являются все файлы, находящиеся в папке Package за исключением файлов из папки Support! На дискеты или на жесткий диск чужого компьютера нужно копировать только инсталляционный пакет файлов.

Четвертый этап - инсталляция

Инсталляцию я уже вкратце описал в этом параграфе. Сначала в качестве эксперимента проведите инсталляцию на своем компьютере. Запустите Setup.exe.

Первое, что после запуска Setup.exe предлагает программа инсталляции, это выйти из всех запущенных программ. Сделайте это и нажмите OK.

В следующем окне под заголовком Directory вам предлагается адрес папки, в которую будет устанавливаться ваша программа. Если он вам не нравится, нажмите кнопку  Change Directory и выберите нужную папку или впишите адрес в текстовое поле. Когда вы будете довольны адресом под заголовком Directory, щелкните над ним по большой квадратной кнопке.

Теперь вам предлагают выбрать или самому назвать программную группу для вашей программы в стартовом меню Windows. Послушайтесь и нажмите Continue.

Программа установки устанавливает файлы на жесткий диск и рапортует об успешном окончании работы. ОК.

Теперь можете запускать свою программу из стартового меню.

Вам будет полезно заглянуть в папку, куда установилась ваша программа, и посмотреть, что там есть.

Чтобы установить вашу программу на компьютер вашего друга, перепишите дистрибутивный пакет на его компьютер и запустите Setup.exe. Или можете, не переписывая, просто вставить первую дискету с дистрибутивным пакетом (ту, на которой Setup.exe) в его дисковод и запустить установку. Что делать дальше, я уже описал.


Часть II. Программирование на Visual Basic – первый уровень

"Вы мне это прекратите!" - сказал Камноедов тем, кто рвался подняться на лифте. И мы прекращаем. Мы будем подниматься пешком.

Вариации на темы Стругацких

Кончилась наша сладкая жизнь. Вернее, в ней наметился большой перерыв. Действительно, калькулятор достался нам без особого напряжения. Работы мало - удовольствия много. Есть ли еще возможности почти без программирования быстренько получать что-нибудь "эдакое"? Есть, и их много. В популярных журналах, посвященных программированию, вы найдете немало программок из двух-трех строчек кода, скопировав которые в свой компьютер, вы получите на экране любопытные вещи. Только вот беда - хоть этих строчек всего две-три, понять их нет никакой возможности. Кто вы в таком случае - программист или переписчик иероглифов? И это тот гранит науки, та скала, которую не объедешь. Придется грызть.

Первые пять из девяти глав этой части - как раз те пять камней, которые нужно сгрызть, пять этажей, которые нужно преодолеть, чтобы подняться на первый в вашей жизни уровень программирования. Только грызите потихоньку, не надо пытаться откусить сразу большой кусок - можно поломать зубы.

Не все, ох не все пройдут сквозь огонь и воду этих пяти глав! Но с теми, кто пройдет, можно идти в разведку. Если вы с честью выйдете из схватки, наградой вам будут остальные четыре главы: графика, рисунки, узоры, движение, мультики, проект "Собственный будильник" и первая в вашей жизни собственная игра "Гонки".

К тому же - кто сказал, что первые пять глав скучные?! Ветвления, циклы, диалог с компьютером, измеритель шустрости, определитель - экстрасенс ли вы, пароль на калькулятор, движение объектов по экрану, поиск минимумов и максимумов - по-моему, это жутко интересно!


  1.  Переменные величины

Чтобы сделать в Visual Basic что-нибудь более существенное, чем примитивный калькулятор или примитивный плеер, нам нужно резко увеличить объем знаний о Visual Basic. Первая ступенька на лестнице набирания знания - переменные величины. Удовольствие больше для Холмса, чем для Брюса Ли. Но что может сделать Брюс Ли с Холмсом?

  1.  Переменные величины. Оператор присваивания

Понятие переменной величины вам известно из школьной математики. Пусть несколько лет назад ваш рост равнялся 130 см. Обозначим этот факт так: r=130. Теперь он равен 160 см, то есть r=160. Получается, что величина r изменилась.Поэтому она называется переменной величиной. Числа 130 и 160 называются значениями переменной величины r.

Любой язык программирования умеет обращаться с переменными величинами. Без них он был бы очень слаб и смог бы извлечь из компьютера только возможности калькулятора. Точно так же алгебра без переменной величины превратилась бы в арифметику. Однако, преимущества применения переменных величин нам откроются позже, а пока наша задача - к ним привыкнуть.

Что же мы можем делать с переменными величинами, программируя на Visual Basic? Прежде всего, мы можем задавать компьютеру значение той или иной переменной величины. Это мы можем сделать при помощи оператора, который называется оператором присваивания. Так, если мы хотим сказать, что а имеет значение 6, то должны просто записать а=6. Запись   а=6  и называется оператором присваивания.  Говорят, что величине а присваивается значение 6. С момента выполнения оператора а=6 компьютер будет помнить, что а равно шести.

В старых версиях Бэйсика оператор присваивания для понятности записывали так:

Let   a = 6

что означало

"Пусть  a = 6".

Мы широко пользовались оператором присваивания в части I. Например, в операторе

Form1.BackColor = vbRed

мы присваивали свойству "цвет" нашей формы значение "красный". Пока, чтобы не рассеивалось внимание, мы в операторе присваивания не часто будем касаться объектов, их свойств и значений. Ограничимся переменными, имеющими численные значения.

После выполнения следующего фрагмента программы

a=2*3+4

b=a

y=a+b+1

компьютер будет знать, что a равно 10, b равно 10, y равно 21. Итак, при помощи оператора присваивания вы можете и вычислять тоже. Мы видим, что справа от знака равенства в операторе присваивания можно писать не только числа, но и переменные величины, и выражения. Выражения в Visual Basic могут быть разных типов, но об этом мы будем говорить позже. Пока под выражением будем понимать арифметическое выражение, то есть такое, к которому вы привыкли в школьной математике. Здесь это были     2*3+4,    a,    a+b+1. Любое арифметическое выражение имеет численное значение.

Не надо пока проверять это на компьютере. Пока только читайте.

Теперь чуть-чуть о свойствах объектов. Выражение может включать в себя не только переменные величины, но и свойства объектов, имеющие подходящее значение. Например,   

Y  =  a + b + Form1.Width.

В левой части оператора присваивания также может стоять не только переменная, но и свойство объекта. Например,

Form1.Width  =  a +  b +  y

В последнем случае действие этого оператора вы сразу увидите на экране.

Еще пара примеров:

ФРАГМЕНТ  ПРОГРАММЫ

ЧТО ЗАПОМНИТ КОМПЬЮТЕР

v = -2+10   :  h = 10*v   :  s = v+h+0.01

v -  8       h  -   80      s  -   88.01

t = 0   :   n = 2*t+40   :    z = -n

t   -  0       n  -   40      z  -    -40

Задание 6:   Определите устно, какое значение будет присвоено переменной t после выполнения фрагмента:   

k=1+2 :  s=2*k :  t=6-s  ?

Необходимо помнить, что если слева от знака равенства стоит переменная величина, то Visual Basic выполняет оператор присваивания "в уме". Имеется в виду, что результат его выполнения не отображается на экране, а только запоминается. Как же увидеть значение переменной величины? Создайте в проекте текстовое поле и дополните программу последнего примера:

t = 0   :   n = 2*t+40   :    z = -n   :     Text1.Text=z

Теперь значение величины z, равное  -40, вы будете видеть в текстовом поле.

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

Debug.Print    t, n, z

покажет нам значения всех трех переменных величин. При этом не нужно создавать никаких текстовых полей, результат появляется в услужливо возникающем окне Immediate.

А вот теперь садитесь за компьютер. Создайте новый проект. Ничего реального мы из него делать не будем, он будет служить только для упражнений с переменными величинами. Разместите в нем кнопку, а в окно кода запишите такую программу:

Private Sub Command1_Click()

a = 2 * 3 + 4

b = a

y = a + b + 1

Debug.Print a, b, y, b + y

End Sub

Запустите проект. Щелкните по кнопке Command1 - в окне Immediate должны появиться 4 числа:

10        10         21          31

Вы видите окно Immediate? Если нет, то - ViewImmediate Window.

Какая польза от переменных величин?

Самая крохотная и простая польза в том, что с их помощью удобно решать несложные вычислительные задачи. Например, даны стороны прямоугольника: a=27018, b=3954. Вычислить его площадь и периметр (напомню, что периметр - это сумма длин сторон прямоугольника).

Создайте проект с кнопкой. Задачу решает следующая программа:

Private Sub Command1_Click()

a = 27018

b = 3954

S = a * b    'Площадь

p = 2 * a + 2 * b   'Периметр

Debug.Print S, p

End Sub

После запуска и щелчка по кнопке вы увидите в окне Immediate следующие два числа:

106829172    61944

Первое из них - площадь, второе - периметр. Без применения переменных величин операторы получились бы более громоздкими:

 S = 27018 * 3954    'Площадь

 p = 2 * 27018 + 2 * 3954   'Периметр

что особенно заметно в больших программах. Есть и масса других преимуществ, которые вы почувствуете в следующих главах.

Продолжаем о переменных величинах

Нужно иметь в виду, что в операторе присваивания слева от знака равенства не может стоять число или выражение. Можно писать с=34, но нельзя писать 34=с. Можно писать  z=f-v+990 , но нельзя писать  f-v+990=z. Правило это принято вот почему. Оператор присваивания устроен так, что сначала смотрит или вычисляет, какое значение имеет правая часть, а затем присваивает это значение тому, что стоит в левой части. То, что справа от знака равенства, присваивается тому, что слева от знака равенства, а не наоборот. Нет смысла присваивать значение числу или  выражению.

Обратите внимание еще на один важный момент. Когда школьник видит  выражение (например, d+2d), он не обязательно его вычисляет. Он может его преобразовать или, скажем, упростить (получив 3d). Компьютер же, видя  выражение, сначала его, может быть, и упростит, но затем обязательно вычислит. А для этого он должен знать численные значения входящих в него величин (в нашем случае это величина d). Таким образом, вычисляя правую часть оператора присваивания (например, y=a+b+1), компьютер должен обязательно заранее знать, чему равны переменные, из которых эта правая часть состоит (в нашем случае это a и b). Ответственность за это знание лежит  полностью на программисте. Пусть забывчивый программист записал такой фрагмент: . . . а=10 : y=a+b+1 . . . , нигде в программе не придав b никакого значения. Естественно, при вычислении  выражения a+b+1 компьютер не будет знать, чему равно b. В такой ситуации разные языки программирования поступают по-разному.  Некоторые "злые" языки просто отказываются вычислять выражения, "вредный" Турбо-Паскаль может подставить вместо b какую-нибудь ерунду (и молчок, между прочим), Visual Basic же добрый, он подставляет вместо b нуль.

Проверим. Заставим Visual Basic в нашем последнем проекте про прямоугольник не выполнять оператор a = 27018. Для этого его можно просто стереть, но удобнее просто поставить перед ним кавычку, тогда Visual Basic подумает, что это комментарий и выполнять не будет:

'a = 27018

Вот результат:

0          7908

Действительно, все выполнилось так, как если бы a было равно нулю.

  1.  Объявление переменных величин

Когда на бал к графине N приезжает герцог M, то слуга объявляет на весь зал: "Герцог M!", отчего все гости сразу узнают, что перед ними герцог, а не какой-нибудь там баронишко, и обращаются к нему соответственно. Все хорошо, все прилично. Если бы слуга проморгал и забыл объявить герцога, то в большинстве случаев тоже ничего страшного бы не произошло. Однако иногда все же могли бы приключиться досадные недоразумения. Например, к герцогу могли бы обратиться так: "Эй, человек, подай-ка лимонад!", а это уже скандал!

Бал - это проект в режиме работы. Гости - это переменные. Слуга - это вы. До сих пор вы никого не объявляли и тем не менее все шло как по маслу. Это потому что Visual Basic умный, он по глазам определяет, кто герцог, а кто нет. Однако не на каждом балу глаза говорят правду. Прежде чем убедиться в этом, изучим еще один полезный и приятный элемент Visual Basic:

InputBox

Как мы можем задать компьютеру какую-нибудь величину? Оператором присваивания - раз. Введя ее в текстовое поле, как мы делали в калькуляторе - два. Есть еще один удобный и приятный способ - InputBox.

В вашем проекте о прямоугольнике вы можете хоть сто раз нажимать на кнопку - результаты все время будут одинаковые. Это потому что исходные данные a=27018 и b=3954 никто не меняет. Скучно. Хорошо бы компьютер при нажатии на кнопку каждый раз спрашивал нас, чему равны стороны прямоугольника. А мы бы ему отвечали. А уж потом он вычислял.

Для этого нам нужно слегка изменить программу:

Private Sub Command1_Click()

a = InputBox("Введите ширину прямоугольника")

 b = InputBox("Введите высоту прямоугольника")

 S = a * b

p = 2 * a + 2 * b

Debug.Print S, p

End Sub

Как видите, заменены первые две строки: a=27018 и b=3954.

Конструкция   

a = InputBox("Введите ширину прямоугольника")

есть оператор присваивания и означает она приказ компьютеру вывести сначала на экран вот такое окно:

после чего человек вводит в белое текстовое поле этого окна любое число и нажимает ОК. После этого компьютер присваивает переменной a введенное значение и продолжает работу, то есть переходит к выполнению следующего оператора.

Запустите проект и посмотрите, как он работает.

Если вам не нравится строка Project1 в заголовке окна, то вы можете задать свою строку, так дополнив оператор:

a = InputBox("Введите ширину прямоугольника", "Ввод данных")

Результат:

Почему плохо не объявлять переменные величины

Посмотрим, где Visual Basic дает сбой, если не объявлять переменные величины. Рассмотрим простую задачу: Даны три стороны треугольника. Вычислить его периметр.

Создаем новый проект с кнопкой для задачи о треугольнике. По аналогии с процедурой о прямоугольнике легко пишем процедуру для треугольника:

неправильная процедура:

Private Sub Command1_Click()

 a = InputBox("Введите первую сторону треугольника")

b = InputBox("Введите вторую сторону треугольника")

c = InputBox("Введите третью сторону треугольника")

 p = a + b + c

Debug.Print p

End Sub

Запускаем проект, вводим стороны - 2, 3, 4 и какой результат мы видим? Вместо 9 мы видим 234! Почему? Здесь тот же случай, что и с калькулятором, там было то же самое, пока мы не применили Val. Почему? Первое: Visual Basic считает содержимое текстового поля окна InputBox (точно так же, как и содержимое обычного текстового поля) текстом, а не числом, если даже оно состоит из цифр. А раз так, то и переменные a, b, c, берущие свое значение из текстового поля, он тоже считает текстовыми, а не числовыми. Не пей из копытца - козленочком станешь! Второе: Visual Basic знает, что по правилам языка знак + имеет несколько смыслов в зависимости от того, к чему он применяется. В частности, при работе с текстом это не приказ складывать, а приказ выстраивать в цепочку. А раз так, то и результат получился тот, что мы видели.

Наши необъявленные переменные, как голодные дворняги, готовы есть все, что им дают. Введите вместо трех чисел три таких текста:     Ко,      ро,      бочка.    Результат - Коробочка.

Почему же тогда в примере о прямоугольнике все прошло нормально? Потому что там было еще умножение. Visual Basic знает, что по правилам языка знак умножения * не имеет смысла при работе с текстом. Значит (догадывается умный и услужливый Visual Basic) мой господин - человек не хочет, чтобы переменные   a, b, c  были текстовыми. Значит быть им числовыми! Проверьте: подсуньте компьютеру вместо чисел коробочку - Visual Basic запротестует.

В примере о прямоугольнике Visual Basic догадался правильно, а в примере о треугольнике ума не хватило. Ну что, теперь везде при сложении применять Val? Не хочется, программы будут получаться громоздкими. Да и разве все дело только в сложении? Как узнаешь, где в следующий раз соломки подстелить?

Так вот, чтобы не перенапрягать умственные способности Visual Basic и предохранить себя от неприятностей, нужно все переменные величины объявлять!

Как объявлять переменные величины

Добавим в окно кода нашего проекта, на самый верх, над заголовком процедуры четыре строки. Получится:

правильная процедура:

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim p As Integer

Private Sub Command1_Click()

 a = InputBox("Введите первую сторону треугольника")

b = InputBox("Введите вторую сторону треугольника")

c = InputBox("Введите третью сторону треугольника")

 p = a + b + c

Debug.Print  a, b, c,  p

End Sub

Объявление

Dim

a

As

Integer

переводится так:

Переменная величина

a

как

целое число

то есть вы обязуете Visual Basic обращаться с переменной величиной a как с целым числом и ничем иным. Говорят, что "переменная a имеет тип Integer". Аналогично объявлены и переменные b, c, p. Объявления будем пока писать выше процедур. Подробнее о местах, где можно делать объявления, написано в .

Запустите проект. Проверьте его работу.

Вместо четырех строк

Dim a As Integer

Dim b As Integer

Dim c As Integer

Dim p As Integer

можно для краткости написать одну:

Dim a As Integer, b As Integer, c As Integer, p As Integer

Но если вы захотите написать еще короче:

Dim a, b, c, p As Integer

то Visual Basic неправильно вас поймет.

Типы данных

Много ли прав на нашем балу у барона Integer? Посмотрим. Попробуем ввести дробное значение первой стороны треугольника -   2,3. Именно так - с запятой, а не точкой. Посмотрим результат. Visual Basic считает a целым числом 2. А теперь -   2,6. Visual Basic считает a целым числом 3. Все правильно. Наш барон высокомерно отказывается быть дробным числом и поэтому любое число, которое мы ему предлагаем, округляет до целого.

Предположим, мы этим недовольны. Мы желаем, чтобы все числа могли быть дробными. Пожалуйста! Для этого достаточно всех гостей объявить князьями. Вот так:

Dim a As Single

Dim b As Single

Dim c As Single

Dim p As Single

Private Sub Command1_Click()

a = InputBox("Введите первую сторону треугольника")

 b = InputBox("Введите вторую сторону треугольника")

c = InputBox("Введите третью сторону треугольника")

 p = a + b + c

Debug.Print  a, b, c,  p

End Sub

Объявление

Dim

a

As

Single

переводится так:

Переменная величина

a

как

десятичная дробь обычной точности

то есть вы обязуете Visual Basic обращаться с переменной величиной a как с десятичной дробью и ничем иным. Десятичная дробь - это любое число, которое может иметь целую и дробную часть (например, 27,3908), в частности это и целое число. Об обычной точности попозже. Говорят, что "переменная a имеет тип  Single ".

Законный вопрос: зачем нам нужен тип Integer, когда тип Single "гораздо лучше"? Ответ: Не во всем и не всегда он лучше, иначе не стали бы его создавать вообще. Подробнее об этом - в .

На бал к Visual Basic вхожи не только бароны и князья, то есть типов данных в Visual Basic довольно много и каждый полезен по-своему. Рассматривать новые типы я буду по мере надобности. А сейчас отмечу главное - в солидном проекте не объявлять переменные неприлично! Поэтому переменные величины нужно объявлять всегда. А чтобы по нашей человеческой рассеянности какая-нибудь переменная не проскочила на бал необъявленной, поручим компьютеру не пускать таких на бал, то есть прикажем Visual Basic выдавать соответствующее сообщение при нашей попытке запустить проект с необъявленными переменными. Для этого - ToolsOptionsEditorRequire Variable Declaration. Отныне в окне кода любого создаваемого вами проекта будет появляться строка Option Explicit, что означает требование обязательно объявлять переменные этого проекта. В общем,   "Посторонним В!…" Тем не менее, свобода есть свобода, и вы всегда можете с песней "Мама - Анархия!" в каком-нибудь проекте стереть строку Option Explicit.

Я сам в примерах этой книги поначалу все, что можно, буду объявлять, но затем для экономии "места и смысла" перестану это делать. Не берите с меня пример!

Вот еще причина, по которой удобно использовать Option Explicit. Как по вашему, что напечатал у меня следующий фрагмент:

x = 2

Debug.Print   х

Если вы думаете, что 2, то ошибаетесь. Ничего не напечатал. Потому что в первой строке присутствует латинская буква "икс", а во второй строке я нечаянно написал русскую букву "хэ". Я был в недоумении. Не помогло и объявление переменной "икс" (не помогло бы, между прочим, и объявление "хэ"). Visual Basic не нашел в программе никаких ошибок. И только применение Option Explicit дало намек на истинную причину ошибки.

Вот какие типы данных вы найдете в этой книжке:

  •  Integer, Single   -
  •  Long, Double, Currency  -
  •  String    -
  •  Date    -
  •  Boolean     -
  •  Перечислимый   -
  •  Массивы   -
  •  Variant    -
  •  Пользовательский   -
  •  Коллекции   -
  •  Объекты   -,

Переменные величины и память

Полностью механизм работы переменных величин не понять, если не узнать, как они хранятся в оперативной памяти компьютера.

Оперативнвя память нужна компьютеру для того, чтобы хранить во время выполнения программы саму эту программу и данные, с которыми программа работает.

Как устроена оперативная память (или просто память)? Представьте себе тетрадный листок в клеточку. В каждую клетку вы имеете право записать карандашом какую-нибудь букву или цифру или знак + или вообще любой символ, который можно найти на клавиатуре. А можете и стереть ластиком и записать другой символ. Много ли букв можно записать на листе? Ровно столько, сколько на нем клеток.

Оперативная память компьютера устроена аналогично такому листу. Только клеточек в ней гораздо больше. Каждая клеточка называется байтом. Для запоминания слова КОШКА понадобится 5 байтов. Подробнее о работе памяти см. в Приложении 1.

Значения переменных величин во время выполнения программы компьютер хранит в оперативной памяти (потому что диски для этого слишком медлительны). Для этого он предварительно под каждую переменную отводит в памяти место. При этом компьютер "рассуждает" так: Раз в программе упомянута переменная величина, значит она в каждый момент времени будет иметь какое-то значение, которое, хочешь не хочешь, надо помнить. Лучше, чтобы не спутаться, отвести в памяти определенное место для запоминания текущего значения каждой переменной величины. Будем называть место, отведенное в памяти под данную переменную, ячейкой. Представьте себе город, в котором имеются разные по размерам комнаты и каждому жильцу отведена ровно одна комната. Это тот самый случай.

Теперь о размере комнат. В городе размер комнат меряют в квадратных метрах, в памяти размер ячейки выражают в байтах. Герцогу нужна более вместительная комната, чем  барону. Переменной типа Single нужна более вместительная ячейка, чем переменной типа Integer. Так оно и есть на самом деле: под переменную типа Integer в памяти отводится ячейка размером 2 байта, а под переменную типа Single - 4 байта. Только не думайте, что переменная типа Single не может быть длиннее 4 цифр, компьютер для записи чисел в ячейки использует более компактную систему, чем для записи символов.

Что делает оператор присваивания с памятью

Я только что рассказывал о работе оператора присваивания, используя такие выражения, как "компьютер знает", "компьютер помнит". Но нам необходимо более строгое понимание работы этого оператора, понимание "ближе к железу".

Рассмотрим пример программы:

Dim a As Integer

Dim b As Integer

Dim y As Integer

Private Sub Command1_Click()

a = 10 : b = 6 : y = a + b + 1

 Debug.Print   y + 200

End Sub

В программе встречаются три переменные, поэтому все они объявлены. Компьютер отведет для них в памяти три двухбайтовые ячейки. Вот как будет работать оператор присваивания:

Выполняя оператор присваивания (например, y=a+b+1), компьютер сначала смотрит на его правую часть (a+b+1). Если в ней встречаются переменные (в нашем случае это a и b ), то компьютер перед вычислением ищет их значения в отведенных под них ячейках памяти (и находит там 10 и 6, так как их туда записали операторы а=10 и b = 6), подставляет эти значения в правую часть и вычисляет ее. Затем вычисленное значение (17) компьютер записывает в ячейку памяти, отведенную под переменную, поставленную в левой части (y).   

Таким образом, когда мы говорим "Компьютер запомнил, что а равно 2", мы подразумеваем "Компьютер записал в ячейку памяти, предназначенную для а, число 2".

А теперь рассмотрим, как будут заполняться информацией ячейки a,b,y   в процессе выполнения нашей программы. В самом начале выполнения программы в них находятся нули. Первым выполняется оператор а=10. Согласно только что приведенному определению оператора присваивания в ячейку a будет записано число 10. Затем выполняется оператор  b= 6 и в ячейке b появляется шестерка. Затем выполняется оператор  y= a+b+1. Компьютер смотрит, что находится в ячейках a и b, видит там 10 и 6, подставляет их в выражение a+b+1, получает 17 и записывает в ячейку y. Наконец выполняется оператор  Debug.Print y + 200. Компьютер заглядывает в ячейку y, видит там 17, вычисляет  17+200 и выводит 217 в окно Immediate.

Схематически этот процесс можно изобразить так:

ПОРЯДОК  ИСПОЛНЕНИЯ ОПЕРАТОРОВ

ЧТО НАХОДИТСЯ В ЯЧЕЙКАХ ПАМЯТИ

ЧТО ВИДИМ

В ОКНЕ Immediate

Ячейка для   a

Ячейка для   b

Ячейка для   y

a= 10

10

0

0

b= 6

10

6

0

y= a+b+1

10

6

17

Debug.Print y + 200

10

6

17

217

Теперь мы можем также уточнить работу оператора Debug.Print :

Если в операторе Debug.Print встречаются выражения с переменными величинами, то Visual Basic находит в памяти значения этих величин, подставляет их в выражения, вычисляет выражения и результат выводит на экран. В память же ничего не записывается.

Задание 7: Ответьте устно, что произойдет, если поменять местами операторы b= 6   и   y= a+b+1?

Режим прерывания. Пошаговый режим выполнения программы

Компьютер выполняет программу со страшной скоростью. Не успели мы нажать кнопку - а результаты уже получены. Пока все идет хорошо, это нас восхищает. Когда же результаты не те, что надо (а ошибок в программе мы не видим), это начинает раздражать. Хотелось бы, чтобы компьютер работал помедленнее и хорошо бы как-нибудь подсмотреть во время работы значения переменных в памяти, это помогло бы найти ошибку. Режим прерывания для этого и предназначен.

Запустите предыдущий проект на выполнение не кнопкой Start, как вы привыкли, а клавишей F8 на клавиатуре. Это горячая клавиша для DebugStep Into. Проект начнет выполняться как обычно. Нажмите, как водится, кнопку Command1. И тут вы почувствуете разницу. Вместо того, чтобы полностью выполниться и показать результат, проект остановится на самой первой строке процедуры, а именно, на Private Sub Command1_Click(), в знак чего эта строка окажется подсвечена желтым цветом. Итак, только-только начав выполняться, наш проект замерз до тех пор, пока следующее нажатие F8 его не разморозит. "Мгновение остановилось".

Интересно, чему во время остановки равны значения переменных в памяти компьютера? Для того, чтобы узнать это, достаточно поместить мышиный курсор на обозначение переменной в тексте процедуры в окне кода. Как и положено, "на табло пока одни нули".

Еще раз F8. Ничего не происходит, только полоса подсветки прыгает на следующую строку. В ней находится первый исполняемый оператор вашей процедуры  –    a = 10.

F8. Visual Basic выполняет a = 10, а следующий оператор подсвечивается. Проверьте, чему сейчас равны  a, b, y  в памяти.

F8. Visual Basic выполняет b = 6, а следующий оператор подсвечивается. Проверьте, чему сейчас равны  a, b, y  в памяти.

Итак, правило простое –  при нажатии на F8 Visual Basic выполняет очередной оператор программы и подсвечивает тот оператор, которому предстоит быть выполненным.

Обратите внимание, что сменился режим Visual Basic. Мы знаем пока два режима: режим проектирования [design] и режим работы  [run]. Теперь в заголовке главного окна Visual Basic вы видите слово [break]. Это означает, что Visual Basic сейчас находится в режиме прерывания. Можно сказать, что режим прерывания - это режим работы с остановками. Вы можете указать Бэйсику, на каких именно операторах останавливаться. О том, как это сделать, написано в . Когда же вы нажимаете на F8, вы приказываете Бэйсику останавливаться на каждом операторе. Такая разновидность режима прерывания называется пошаговым режимом.

F8. Visual Basic выполняет y= a+b+1, а следующий оператор подсвечивается. Проверьте, чему сейчас равны  a, b, y  в памяти.

F8. Visual Basic выполняет Debug.Print y + 200, а следующий оператор подсвечивается. В окне Immediate возникает число 217.

F8. Подсветка уходит, так как процедура выполнена. Можно снова жать на кнопку Command1.

Замечание об отладке в пошаговом режиме: При отладке в пошаговом режиме вам часто нужно на экране видеть одновременно окно кода, окно Immediate и саму форму. Но при нажатии на F8 то одно, то другое часто пропадает из вида, будучи закрыто другими окнами. Чтобы этого не происходило, еще до начала отладки расположите окно кода и окно Immediate так, чтобы они не перекрывали друг друга, а главное окно Visual Basic уменьшите до части экрана. Затем после запуска отладки форму перетащите на освободившуюся часть экрана. Тогда окно Visual Basic не будет перекрывать форму и проблема исчезнет.

Итак, компьютер сделал все то, что сделал бы при нажатии Start, но только в медленном темпе.

В любой момент пошагового выполнения программы вы можете вместо F8 нажать Start, которая по такому случаю переименовывается в Continue, и программа продолжит выполняться в обычном режиме.

Оператор присваивания меняет значения переменных величин

Пока я не рассматривал программы, в которых переменные меняют свою величину. Теперь настало время такую программу рассмотреть:

Dim k As Integer

Private Sub Command1_Click()

   k = 10: Debug.Print k:          k = 25: Debug.Print k:          k = 4: Debug.Print k

End Sub

Запишем схематически процесс изменения информации в ячейке k:

ПОРЯДОК  ИСПОЛНЕНИЯ ОПЕРАТОРОВ

ЧТО НАХОДИТСЯ В ЯЧЕЙКЕ ПАМЯТИ   k

ЧТО ВИДИМ

В ОКНЕ Immediate

k=10

10

Debug.Print k

10

10

k=25

25

Debug.Print k

25

25

k=4

4

Debug.Print k

4

4

Как видите, в процессе работы программы содержимое ячейки k меняется.  Так, при выполнении оператора k=25 там вместо значения 10 появляется 25. А куда же девается десятка? Она стирается, то есть компьютер забывает ее безвозвратно. Здесь действует общий принцип работы всех компьютеров:

Если в какое-нибудь место памяти или диска записывается новая информация, то старая информация, записанная там раньше, автоматически стирается, даже если она кому-то и нужна.

Раз теперь вместо 10 в ячейке k находится 25, то оператор Debug.Print k печатает уже 25. (Слова "печатает" и "Print" устарели, они остались от тех времен, когда мониторов еще не было, а вместо них были принтеры. Когда я по старинке говорю, что информация печатается, я подразумеваю, что она появляется на мониторе в том или ином окне.) Следующий оператор k=4   запишет на место 25 четверку, а  Debug.Print k  ее напечатает. Проверьте.

А что напечатает следующая программа?

Dim f As Integer

Private Sub Command1_Click()

   f = 30:     f = f + 4:      Debug.Print f

End Sub

Оператор   f=30  запишет в ячейку  f  число 30.  А что сделает странный оператор f=f+4 ?  Не думайте, что это уравнение или что-нибудь в этом роде. Это оператор присваивания, а значит и выполнится он согласно определению оператора присваивания, то есть сначала вычислит правую часть  f+4 , подставив туда вместо f его значение, взятое из ячейки, и получит 34. Затем число 34 будет записано в ячейку, отведенную под переменную, обозначенную в левой части, то есть опять в ячейку  f. При этом старое значение 30 будет стерто.  Debug.Print  f   напечатает 34.

Таким образом, оператор f=f+4 просто увеличивает число в ячейке f  на четверку или, другими словами, увеличивает  f на 4.

Зачем это нужно?  Узнаете позже. Очень даже нужно.

Задание 8:

Определите без компьютера, что будет напечатано при выполнении следующих фрагментов программ:

  •  a=100 :  a=10*a+1 : Debug.Print a
  •  a=100 :  a= -a : Debug.Print a
  •  a=10 :  b=25 :  a=b-a :  b=a-b : Debug.Print a, b
    1.  Еще об именах

Как правильно дать имя объекту, мы говорили в . Переменные же величины мы привыкли обозначать буквами (a, s, d ... ). Большинство языков программирования, в том числе и Visual Basic, позволяет обозначать переменные именами. Вот два равносильных фрагмента программы:

a=3;

Summa=3;

b=4-a;

ROBBY=4-Summa;

Debug.Print  a,  b+50

Debug.Print   Summa,  ROBBY+50

В том и другом случае будут напечатаны числа 3 и 51. Очевидно, компьютеру все равно, как мы обозначаем переменные величины или объекты, в смысл имен он не вдумывается и не удивляется, что переменная Summa никакой суммой не является, а просто числом 3.

Многие авторы не рекомендуют использовать в именах русские буквы, говорят, что это опасно. Лично я в связи с этим практически ни разу с большими проблемами не столкнулся. Мой совет: если у вас с английским все ОК, то избегайте русских букв, в противном случае ничего страшного, если вы будете все именовать по-русски.

Примеры правильной записи имен:

a      

polnaja_Summmma     

tri_plus_dva    

s25    

a1b88qqQQQQQQQQQQQQ      

oshibka

Это_не_имя     

Примеры неправильной записи имен:

polnaja  summa      - содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркивания

Это правильное имя- содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркиван

2as  - начинается с цифры

Domby&Son  - содержится символ & , не являющийся буквой, цифрой или знаком подчеркивания

Visual Basic игнорирует в именах разницу между строчными и прописными буквами. Так, для него Summa и sUmmA - одно и то же имя. И он присматривает за тем, чтобы в окне кода они были написаны одинаково (но не за всеми русскими именами он так присматривает).

  1.  Математика. Запись арифметических выражений

Простые арифметические вычисления лучше делать на калькуляторе, чем на компьютере, а вот сложные - наоборот. В этом разделе вы научитесь правильно вводить в компьютер сложные формулы. Если вы - школьник не самых старших классов, то не все, что здесь написано, будет вам понятно. Не огорчайтесь, при дальнейшем чтении непонятные вещи вам не понадобятся.

Действия арифметики обозначаются в Visual Basic следующим образом:

ДЕЙСТВИЕ

РЕЗУЛЬТАТ

СМЫСЛ

2    +   3

5

плюс

4    -    1

3

минус

2    *    3

6

умножить

10  /  2

5

разделить

17  \  5

3

целочисленное деление (17 делится на 5, получается 3, в остатке 2)

17  Mod  5

2

остаток от целочисленного деления

2 ^ 3

8

2 3   (два в кубе)   -  возведение в степень

На уроках математики мы привыкли писать   ab+cd , подразумевая:  a умножить на b плюс c умножить на d.   В Visual Basic это выражение мы обязаны писать так:  a*b+c*d.  Иначе компьютер подумает, что нужно к переменной, имеющей имя ab, прибавить переменную, имеющую имя cd. Во избежание двусмысленности знак умножения положено писать всегда, в том числе и перед скобками. Например,    * (b+c).

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

очень затруднен. Поэтому для обозначения деления и выбрана косая черта. Это выражение на Visual Basic положено записывать так:     (a+1)/(b+1).  Если бы мы не поставили скобок, то выражение получилось бы таким    a+1/b+1, а это неправильно, так как компьютер, как и мы, всегда перед сложением и вычитанием выполняет умножение и деление, поэтому в последнем случае он бы сначала разделил  1  на  b , а затем к результату  прибавил  a  и 1.

Вопрос: когда в выражениях можно ставить скобки? Ответ: всегда, когда у вас возникают сомнения в правильной очередности действий. Лишняя пара скобок не помешает.  Пример: записать на Visual Basic выражение:

Его можно было бы записать так:    

(1 + a / (2+a*b)) / (3+a)  *  b .

Разберитесь в этой записи. К сожалению, в выражениях разрешается писать только круглые скобки. Квадратные и фигурные запрещены. От этого сложные выражения с большим количеством скобок на глаз воспринимаются с трудом, так как трудно для конкретной скобки увидеть ее законную пару. В этом случае я могу посоветовать идти "от малого к большому", то есть сначала заметить самые малые из взятых в скобки фрагменты выражения (у нас это  3+a   и  2+a*b). После этого будет уже легче заметить более крупные фрагменты, такие как 1 + a / (2+a*b) , и т.д.

Разобрались? Эта запись меня совсем не удовлетворяет, так как мы не знаем, что Visual Basic будет делать раньше - делить   (1 + a / (2+a*b))   на  (3+a)  или умножать (3+a)  на b.  А от этого зависит результат. Добавим для верности пару скобок:

((1 + a / (2+a*b)) / (3+a))  *  b

Теперь все в порядке.

Запись десятичных дробей. Путаница с точками и запятыми.  Почти во всех языках программирования и уж, конечно, в Visual Basic, в десятичных дробях принято вместо запятой ставить точку. Пример:    62.8   -   шестьдесят две целых восемь десятых. Однако, если помните, при вводе дробей в InputBox Visual Basic требовал запятую, да и результаты он выводит с запятой. В чем дело? Visual Basic, являясь приложением Windows, частично воспринимает от нее привычку пользоваться в России запятой. Особой проблемы тут нет. Используйте метод "научного тыка" - пользуйтесь точкой, а если Visual Basic жалуется или начинает делать что-то не то, тогда меняйте ее на запятую.

Математические функции.  Кроме нескольких действий арифметики Visual Basic может выполнять и другие математические действия, например, извлечение квадратного корня. На компьютере нет клавиши со значком , поэтому в Visual Basic имеется специальная функция - Sqr. Например, корень из 25 обозначается так -   Sqr(25), корень из a+b так  -   Sqr(a+b). Здесь Sqr  -  сокращение от английского выражения Square root -  квадратный корень. То, из чего нужно извлечь корень, записывается в скобках.

Приведу неполный список математических функций Visual Basic:

ДЕЙСТВИЕ

РЕЗУЛЬТАТ

СМЫСЛ

Sqr (25)      

5

корень квадратный

Round (5.82716)    

6

округление до целых

Round (5.82716,  3)    

5.827

округление до трех знаков после точки

Abs ( -20)

20

абсолютная величина (модуль) числа

Fix (3.98)     

3

целая часть числа (дробная часть отбрасывается)

Fix (-3.98)     

-3

Int (3.98)     

3

наибольшее целое число, не превышающее выражение в скобках

Int (-3.98)     

-4

Rnd

0.73088

случайное число из диапазона (0 - 1)

Кроме этого, имеются функции   Sin, Cos, Tan (что означает тангенс), Atn (что означает арктангенс), Exp, Log и др.

Работа со случайными величинами описана в , .

Примеры:

Выражение (2+1)^2       при вычислении даст 9
Выражение
1+ (2+8)^3      при вычислении даст 1001
Выражение
1+Abs(5-8)         при вычислении даст 4
Выражение
2^4+Sqr(35+1)      при вычислении даст 22
Выражение
Sqr (8+Int(41.5))        при вычислении даст 7
Выражение
21 \ (Round (2.54+1))    при вычислении даст 5

Задание 9:   Определите без компьютера, что напечатает данный фрагмент программы:

a = (2^2+1) * (20- (2^2)^2) - 11  :   b=11 \ (a-4)   :   Debug.Print  a^2 + b - 1

  1.  Типы данных и точность вычислений

Если вы считаете, что компьютер все вычисления выполняет абсолютно точно, то вы ошибаетесь. Компьютер всего лишь очень точен. Очень, а не абсолютно. В этом вы скоро убедитесь.

Integer и Long - целые числа

Создайте проект с кнопкой и введите такую программу:

Dim a As Integer

Dim b As Integer

Private Sub Command1_Click()

a = 100

b = 1

Debug.Print a, b, a + b

End Sub

Работает она нормально. Посмотрим, насколько большие числа способна воспринимать наша программа. Заменим  b=1  на b=40000. Visual Basic выдает сообщение об ошибке "Overflow", что означает "Переполнение ячейки". В чем дело?

Как вы уже знаете, в Visual Basic принято правило, что если человек объявил переменную, как Integer, то он разрешает ей принимать значения только целых чисел. Число типа Integer занимает в памяти два байта. Значит, под переменные а и b компьютер отводит в памяти ячейки по два байта каждая. Два байта - это маленький объем памяти и уместиться в него может лишь небольшое целое число, а именно - число в диапазоне от   -32768  до 32767.

Для того, чтобы переменная имела право принимать значения больших целых чисел, она должна быть объявлена не как Integer, а как Long (Длинное Целое). Под переменную типа Long компьютер отводит в памяти 4 байта и поэтому она может принимать значения в диапазоне от  2147483648 до 2147483647.

Зачем нужен Integer, если есть Long? Ну, хотя бы для того, чтобы экономить память, она же не резиновая.

Задание 10:   Население Москвы равняется  а=9000000 жителей. Население Васюков равняется b=1000 жителей. Вся Москва переехала в Васюки. Сколько там стало жителей? Используйте переменные величины.

Single и Double - десятичные дроби

Создайте проект с кнопкой и введите такую программу:

Dim a As Single

Dim b As Single

Private Sub Command1_Click()

a = 100.78656954325  : b = 40000.1234567895  :   Debug.Print a, b, a + b

End Sub

Запустите проект. Вот результат:

100,7866    40000,13      40100,91

Как видите, Visual Basic обрезал наши длинные числа до 7 значащих цифр. Сделал он это потому, что 4 байта, отведенные под ячейку памяти для переменной типа Single, не в состоянии вместить больше. Если мы хотим иметь большую точность, то объявляем наши переменные имеющими другой тип - Double - десятичная дробь двойной точности. Под переменную типа Double компьютер отводит в памяти 8 байтов и поэтому она может быть гораздо длиннее.

Dim a As Double

Dim b As Double

Private Sub Command1_Click()

a = 100.78656954325  : b = 40000.1234567895  :   Debug.Print a, b, a + b

End Sub

Запустите проект. Вот результат:

100,78656954325         40000,1234567895         40100,9100263327

Здесь максимум - 15 значащих цифр. Если вам интересно задать в программе еще более длинное значение b, например, b = 40000.12345678957453457, то у вас ничего не получится, Visual Basic обрежет его прямо в программе, зная, что с такими длинными числами работать он все равно не умеет.

Зачем нужен Single, если есть Double? Ну хотя бы для экономии памяти.

Целые числа или десятичные дроби? Числовой тип Currency

Вы спросите: зачем использовать типы целых чисел Integer и Long, если типы десятичных чисел Single и Double обеспечивают нам работу и с целыми и с дробными числами? Кроме экономии памяти здесь есть еще проблема абсоютной точности вычислений. Дело в том, что при использовании типов десятичных дробей вполне мыслима ситуация, когда дважды два будет не точно 4, а, скажем, 4.00000000000381. Связано это с особенностями представления десятичных дробей в компьютерах.  В большинстве реальных задач такая маленькая погрешность несущественна, однако существуют задачи, где точность нужна абсоютная. При использовании же типов целых чисел Visual Basic присматривает за тем, чтобы все числа и результаты были абсолютно точными целыми числами. Конечно, при делении в этом случае приходится округлять.

Если вам нужна абсолютная точность при работе с числами, а величина чисел превышает два миллиарда, тип Long будет слишком узок для вас. Воспользуйтесь типом Currency. Этот тип хоть и имеет дробную часть в размере 4 десятичных знаков после запятой, действия над числами выполняет абсолютно точно. Диапазон представляемых им величин весьма велик - примерно от  -900 000 000 000 000  до  900 000 000 000 000.

Совет: Если вам необходимо, чтобы переменная была целым числом и никогда дробным, объявляйте ее целым типом, в противном случае - десятичным.

Не очень устаревшие способы объявления переменных

"Я советую всем нарочно написать на бумаге Испания, то и выйдет Китай"

Гоголь

Вы еще не столкнулись со странной привычкой Visual Basic ставить после чисел в окне кода какие-то значки? Например, вы не объявляли переменную a и собираетесь написать a = 123456789012345, получается же a = 123456789012345#. Ничего страшного, не обращайте внимания, это Visual Basic сообщает вам, что с его скромной точки зрения переменная a имеет тип Double.

У шести типов есть свои значки, по которым их можно узнать (тип String еще не проходили):

Integer

Long

Single

Double

String

Currency

%

&

!

#

$

@

Дальше. Если вам лень писать Dim b As Double, вам достаточно в окне кода, там, где переменная b встречается в первый раз, написать b# вместо b, например, b# = 5 вместо b=5. Visual Basic будет считать, что вы нормально объявили переменную. Впрочем, этот способ объявления мне не нравится.

Есть еще один способ объявления, совсем страшный. Написав DefInt I - M, вы тем самым объявите компьютеру, что переменнные, имена которых начинаются с букв I, J, K, L, M, N, обязаны иметь тип Integer. Ну и для других типов аналогично: DefLng,  DefSng,  DefDbl и так далее.

Форматирование результата

Взгляните на такую программу:

Dim a As Double

Dim b As Double

Dim y As Double

Private Sub Command1_Click()

   a = 2457642345034.78  :      b = 0.00000000037645  :      y = a / b  :      Debug.Print   y

End Sub

Прикиньте без компьютера, каков будет результат. Ясно, что очень большое число, но какое - неясно. Запустите программу. Вот результат:

6,52846950467467E+21

Что это значит? Это значит, что Visual Basic, видя, что вы работаете с такими гигантскими числами, подумал, что вы большой ученый, и представил вам результат не в нормальном, как для простых смертных, а в так называемом экспоненциальном или научном формате (виде). Но не так страшен черт. Оказывается, это получается шесть целых и сколько-то там дробных и все это умножено на 10 в 21-й степени. Конструкция   Е+21 и означает умножение на 1021. По-другому, вам нужно передвинуть запятую на 21 позицию направо -  и получится нормальное число, то есть 6528469504674670000000. Кстати, о точности. Обратите внимание, что поделено было неточно. Точно получилась бы бесконечная периодическая дробь, а где ее хранить, бесконечную?

Если бы вместо  Е+21  было  Е-21, это означало бы умножение на 10-21, то есть деление на 1021, то есть передвижение запятой на 21 позицию налево, то есть очень маленькое число.

Если после этих объяснений вы все еще не полюбили экспоненциальный формат, вы можете приказать компьютеру, чтобы он вас им не утомлял, а показывал результаты по-человечески. Для этого в операторе Debug.Print нужно вместо y написать Format(y, "0.0000"). Получится Debug.Print Format(y, "0.0000"). Конструкция в кавычках состоит из нулей и точки и означает, что вы желаете видеть число в обычном виде, дробную часть числа состоящей ровно из 4 цифр, а остальные пусть Visual Basic вам не показывает. Целую же часть числа Visual Basic покажет вам полностью в любом случае, какова бы она ни была. Вот тот же результат в новом формате:

6528469504674670000000,0000

Вот вам и первое улучшение для калькулятора, ведь он тоже норовит показывать длинные результаты в экспоненциальном формате. Вместо

Результат.Text = Val(Число1.Text) / Val(Число2.Text)

можете написать

Результат.Text = Format(Val(Число1.Text) / Val(Число2.Text), "0.00000000000000000000")

Только имейте в виду - если ваш результат будет такой маленький, что 20 цифр, указанных мной после точки, его "не почувствуют", то ничего, кроме нулей, вы в результате и не увидите, а вот экспоненциальный формат покажет вам настоящий, хоть и непривычный для чтения, результат.

Еще о пользе переменных

Значения переменных величин не обязаны, подобно надписям и значениям текстовых полей, отображаться "на медлительной поверхности проекта". Они спрятаны глубоко в сверхбыстрой оперативной памяти компьютера, там над ними удобно и быстро проводить вычисления и разнообразные логические преобразования. Фактически вся мыслительная работа компьютера проводится над переменными величинами. И лишь иногда, когда человеку понадобится, они показываются "на поверхности" в виде содержимого текстовых полей или как-нибудь еще.

Создавая калькулятор, мы не ведали ни о каких переменных, поэтому вместо изящного

Рез = Чис1 + Чис2

писали громоздкое

Результат.Text = Val(Число1.Text) + Val(Число2.Text)

Вообще, попытки использовать для вычислений вместо переменных текстовые поля напоминает попытку неуклюжих королей-тугодумов (текстовых полей) договориться между собой. После безуспешных попыток они вызывают своих шустрых министров иностранных дел (переменные величины), которые в два счета договариваются и отдают готовый договор на подпись королям (имеется в виду, что результат вычислений показывается в текстовом поле).

С учетом сказанного попробуем улучшить программу калькулятора:

Dim Чис1 As Double        'Переменная, содержащая число из текстового поля Число1

Dim Чис2 As Double        'Переменная, содержащая число из текстового поля Число2

Dim Рез As Double          'Переменная-результат, предназначенный для текстового поля Результат

_____________________________________________________________________________

Private Sub Кл_сложения_Click()

   Чис1 = Число1.Text     'Значения исходных данных переходят в переменные из текстовых полей

   Чис2 = Число2.Text

   Рез = Чис1 + Чис2     'Обработка переменных для получения результата

   Результат.Text = Рез  'Значение результата переходит из переменной в текстовое поле

End Sub

Эта схема, когда информация из текстовых полей (или других средств задания исходных данных) передается в переменные, затем обрабатывается, а затем из переменных передается обратно - в текстовые поля - весьма разумна и я рекомендую ей пользоваться.

Три совета

Дорогой читатель! Если вы сейчас сидите за компьютером, то вот вам три моих совета, по своей силе приближающихся к непререкаемым приказам:

1. Программы, которые вы видите в книге, вам необходимо вводить в компьютер и выполнять их, даже если они кажутся вам почти понятными, и даже если я явно этого не требую. В ряде случаев вы получите неожиданные результаты, из чего сделаете вывод, что программы эти вы поняли не до конца.

2. В каждой из этих программ экспериментируйте, то есть разными способами изменяйте в них то, что я как раз в этот момент объясняю. Например, если я объясняю оператор    For i=1 To 5,  пробуйте    For i=1 To 10.

3. Выполняйте и сверяйте с ответом все задания. Это, конечно, главный совет из трех. Учтите, что сверенная с ответом правильно работающая программа – ваша победа, сверенная с ответом неправильно работающая программа – временное поражение, отказ от сверки - разгром.

Если вы пожалеете времени и пренебрежете этими советами, то через несколько страниц можете обнаружить трудности в понимании материала и вскоре не сможете правильно составить большинство программ.

  1.  Порядок создания простого вычислительного проекта

Все, что здесь сказано, полезно не только для вычислительных, но и для всех других проектов.

Задача:

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

Порядок создания проекта:

1. Программист сам должен знать решение задачи. Ведь программа - это инструкция по ее решению. Нельзя давать инструкцию, не зная, как решать.

В нашем случае программист должен знать формулы для вычисления всего, что нужно:  

 

  1.  площадь основания = ширина  х  толщину 
  2.  объем = площадь основания  х  высоту
  3.  периметр основания = две ширины + две толщины
  4.  площадь боковой поверхности = периметр основания  х   высоту
  5.  полная площадь поверхности = две площади основания + площадь боковой поверхности

Как видите, я для стройности вычислений ввел периметр основания и площадь боковой поверхности.

2. Нужно придумать имена переменным.  Имя переменной должно говорить о ее смысле. Если смыслом является ширина коробки, то не ленитесь и не называйте ее а, потому что через полгода, разбираясь в своей полузабытой программе, вы будете долго тереть лоб и думать – Что, черт возьми, я обозначил через а? Называйте ее Ширина (если вы не знаете английского) или, к примеру, Width (если знаете). Так делают все профессиональные программисты (а они, как известно, терпеть не могут трудиться зря, значит, зачем-то это им нужно).

Удовлетворимся такими именами:

Ширина  - ширина
Толщина - толщина
Высота  - высота
S_основ  - площадь основания
V  - объем

Периметр - периметр основания
S_бок  - площадь боковой поверхности
S_полн  - полная площадь поверхности

3. Нужно определить, какого типа будут переменные. Поскольку нам заранее неизвестно, будут ли исходные данные целыми, объявляем все переменные - Double. Первые строки программы будут такими:

'Задача вычисления площади основания, объема и полной площади поверхности

    'спичечной коробки по известным ее размерам

                 'Объявляем переменные величины

Dim Ширина As Double       'ширина

Dim Толщина As Double     'толщина

Dim Высота As Double       'высота

Dim S_основ As Double      'площадь основания

Dim V As Double                 'объем

Dim Периметр As Double  'периметр основания

Dim S_бок   As Double       'площадь боковой поверхности

Dim S_полн As Double       'полная площадь поверхности

4. Перед вычислениями нужно задать исходные данные решения задачи. Для этого нужно решить, каким способом пользователь будет задавать размеры коробки - при помощи текстовых полей, функции InputBox () или как-то по-другому. Выберем InputBox.

Вот следующие строки программы:

Private Sub Command1_Click()

  'Ввод исходных данных

Ширина = InputBox("Введите ширину коробки")

Толщина = InputBox("Введите толщину коробки")

Высота = InputBox("Введите высоту коробки") 

5. Теперь нужно задать компьютеру действия, которые он должен проделать с исходными данными, чтобы получить результат. 

  'Вычисление результатов

S_основ = Ширина * Толщина

V = S_основ * Высота

Периметр = 2 * Ширина + 2 * Толщина

S_бок = Периметр * Высота

S_полн = 2 * S_основ + S_бок

6. После получения результатов их нужно показать человеку. Действительно, все операторы присваивания компьютер выполняет "в уме". После их выполнения в ячейках памяти будут находиться числовые результаты решения задачи. Чтобы их увидеть, человек может использовать текстовые поля, как это мы только что сделали, улучшая калькулятор. В  описывается, как выводить информацию в текстовое поле. Однако, я использую новый для нас оператор Print, который в нашем случае будет печатать результат прямо на поверхности формы (в отличие от Debug.Print, который печатает в окне Immediate):

 'Отображение результатов

Print "Площадь основания ="; S_основ

Print "Объем ="; V

Print "Полная площадь поверхности ="; S_полн

End Sub

Обратите внимание, что здесь в первом операторе Print - два элемента печати, разделенные точкой с запятой: текстовое пояснение "Площадь основания =" и собственно переменная, значение которой мы хотим увидеть - S_основ. То же самое и в других операторах Print. То же самое можно делать и в Debug.Print. Полностью правила записи и возможности этих операторов вы найдете в .

Запустите проект и убедитесь в его работоспособности. Вы спросите - зачем было так долго трудиться для решения такой простой задачи? Действительно, для простых исходных данных эту задачу быстрее решить в уме. Однако, соблюдение приведенного мной порядка составления программы облегчит вам в дальнейшем программирование реальных задач для компьютера. Этот порядок - начинаем со ввода исходных данных, затем преобразовываем их в переменные величины, затем, обрабатывая переменные величины, получаем результат, затем преобразовываем результат из переменных величин в нечто видимое - общепринят.

Замечание. Попробуйте в режиме работы потаскать форму по экрану, нечаянно затащив часть ее напечатанных результатов за пределы экрана. Вы видите, что эта часть результатов стерлась. Чтобы такого не происходило, в режиме проектирования установите свойству AutoRedraw формы значение True.

Задания 11-13:

Написать с использованием переменных программы для решения следующих задач:

  1.  Автомобиль 3 часа ехал со скоростью 80 км/час и 2 часа со скоростью 90 км/час. Вычислить среднюю скорость автомобиля (она равна суммарному пути, деленному на суммарное время). Значения переменным задать операторами присваивания, результат напечатать оператором Debug.Print с пояснениями.
  2.  В самом углу прямоугольного двора стоит прямоугольный дом. Подсчитать площадь дома, свободную площадь двора и длину забора. Примечание: в углу, где дом, забора, естественно, нет. Размеры дома и двора вводим при помощи InputBox, результаты отображаем в текстовых полях. Все числа целые.
  3.  Ввести из текстового поля радиус окружности. Вычислить длину окружности и площадь круга. Результаты с пояснениями печатать с 5 знаками после десятичной точки с помощью оператора Print.
    1.  Строковые переменные

Строковые переменные очень важны. Без них, например, невозможен разговор с компьютером. Да и вообще, значительная часть информации, с которой работает компьютер, текстовая (то есть строковая).

Создайте двухкнопочный проект с такой программой:

Dim a As Integer

Dim b As String

_____________________________

Private Sub Command1_Click()

a = 98

Debug.Print a

End Sub

_____________________________

Private Sub Command2_Click()

b = "Привет всем!"

 Debug.Print b

End Sub

Сравним две процедуры.

Объявление Dim a As Integer говорит о том, что переменная a обязана иметь числовое значение, и поэтому в первой процедуре оператор  a=98  записывает в ячейку  a  число 98.

Объявление Dim b As String говорит о том, что переменная b обязана иметь строковое (текстовое) значение, то есть ее значением будет не число, а произвольная цепочка символов, например,       Привет всем!     или    рпН2Н(*fD6:u   . Поэтому во второй процедуре оператор b ="Привет всем!" записывает в ячейку b строку  Привет всем! . Оператор Debug.Print b, поскольку он обязан всегда выводить на экран содержимое ячейки b, выведет  на экран текст    Привет всем!

Обратите внимание, что в программе текст должен браться в двойные кавычки, а в памяти он хранится без кавычек и на экран выводится без кавычек.

Информация в ячейке памяти под строковую переменную может в процессе выполнения программы меняться точно так же, как и в ячейке для числовой переменной. Например, при выполнении фрагмента

a="Минуточку!"   :     Debug.Print a   :     a="Здравствуйте!"   :     a="До свидания!"   :    Debug.Print a

в ячейке a будут по очереди появляться строки

  Минуточку!              Здравствуйте!             До свидания!

а на экран будут выведены строки:

Минуточку!          

До свидания!

Еще пример:

a="Цикл"   :     Debug.Print a   :     a=a+a :    Debug.Print a+a+a +"Конец цикла"

Поскольку знак + по отношению к строкам есть знак соединения, то a+a  будет равняться "ЦиклЦикл" и это же - новое значение a. Поэтому здесь на экран будут выведены строки:

Цикл

ЦиклЦиклЦиклЦиклЦиклЦиклКонец цикла

Выражения    a+a    и    a+a+a +"Конец цикла"     в последнем примере являются ни чем иным, как строковыми выражениями, по той простой причине, что в них производятся действия, результатом которых является строка.

Строковую переменную можно задавать не только оператором присваивания, но и функцией InputBox. При вводе ставить кавычки тоже не надо. Пример:

Dim a As String

Private Sub Command1_Click()

a = InputBox("Введите какое-нибудь слово")

 Debug.Print "Вы ввели слово "; a

End Sub

Обратите внимание на пробел перед второй кавычкой в операторе Debug.Print. Он нужен для того, чтобы слова при выводе не сливались.

Прежде, чем идти дальше, нужно, конечно, разобраться с хитросплетениями запятых, точек с запятыми, кавычек и пробелов в операторе Print:

  1.  Как выводить информацию оператором Print 

Будем пробовать, вы тоже пробуйте:

Фрагмент программы  

Результат на экране

Print

Печатается пустая строка

Print  1

1

Print 1; 66

1  66

Print 1; -2; 3.14

1  -2  3.14

Print 1, -2, 3.14