You are on page 1of 10

4) Делаем первую программу - музыкальный

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

Старые компьютеры общались с пользователем с помощью простого текстового


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

Дождаться от пользователя ввода числа с клавиатуры


Записать полученное число в определенную ячейку памяти
Вывести на экран содержимое этой ячейки

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


числа и его местоположение на экране роли для разработчика не играли. Все эти аспекты
решались операционной системой.

Текстовые интерфейсы фактически представляли единственную возможность общения:


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

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


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

Весь процесс разработки программ происходит в рамках многооконной системы


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

Начнем создание плеера в Delphi 7 (вы должны были эту среду установить - это было
первым заданием). Со средой Delphi 7 вы тоже немного познакомились, тоже как и
договаривались в предыдущем задании. Поэтому вот такая примерно картинка, которая
появится на экране спустя несколько секунд после запуска Delphi, не должна у вас
вызвать особого удивления:

http://russianenterprisesolutions.com/sbo/im/21.jpg

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

Итак, главное окно A из всех видимых на экране - это так называемое окно дизайнера или
проектировщика формы.

Создание типичной Windows-программы начинается с создания ее окна или формы. Под


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

Чтобы понять предназначение дизайнера и формы, поступим так - сразу используем его
для создания готовой программы! Помните, в первом уроке я рассказывал, как вы жмете
на волшебную кнопочку "Создать exe-файл" и этот файл таинственным образом
появляется? Кстати, кнопочка-то эта, вот она, родимая - см. B на рисунке. Называется она
Run (исполнить, запустить, выполнить).
Можете кстати на нее нажать, не стесняйтесь. И что произойдет, как вы думаете?

Перед тем, как начать создание программы-файла, Delphi предложит сохранить так
называемый текущий проект.

Всю совокупность исходных текстов программы и файлов с дополнительными


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

Для быстрого сохранения всех файлов проекта можно использовать кнопку Save All
(кнопка C на картинке), команду главного меню File > Save All (Файл > Сохранить все)
или комбинацию клавиш Ctrl + Shift + S.

Выберите место, куда Delphi сначала предложит сохранить файл Unit1.pas (название по
умолчанию для файла проекта с исходными текстами), и Project1.dpr (название по
умолчанию для главного файла проекта), после чего на экране на некоторое время
возникнет примерно вот такое окно:

http://russianenterprisesolutions.com/sbo/im/22.jpg

В нем показывается процесс преобразования исходных текстов нашей программы в


готовый исполнимый exe-файл. А зачем что-то преобразовывается? Ведь мы не написали
пока еще ни одной строчки и вообще пока ничего не делали?

Выше говорилось, что всю деятельность по организации работы подготовленных в форме


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

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

http://russianenterprisesolutions.com/sbo/im/23.jpg

Познакомьтесь - это ваша первая программа! Сделанная вашими руками. Если ее сейчас
закрыть, то вы автоматически вернетесь в Delphi. А файл этой программы лежит в
каталоге нашего проекта - можете проверить. По умолчанию называется он Project1.exe.
Запустите его и полюбуйтесь :)

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

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

Для этого нам потребуется так называемая палитра компонентов, хранящая образы
всевозможных элементов управления (компоненты). Вот где она расположена - см. D на
рисунке.

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

http://russianenterprisesolutions.com/sbo/im/24.jpg

Напомню, что это пока что макет, модель, проектируемый вид нашей программы. Чтобы
сделать из нее полноценное и самостоятельное приложение, нажмем уже известную
кнопочку Run. Вот что получим на этот раз:

http://russianenterprisesolutions.com/sbo/im/25.jpg

Да, это явно наше :)

Вернемся в Delphi.

Текущее задание - найдите на палитре компонентов пользовательский объект "кнопка",


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

Последнее, что нам осталось изучить перед созданием плеера, - это так называемый
Инспектор объектов (Object Inspector). Вот он - см. F на рисунке.

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

При желании эти надписи можно легко изменить. Для этого придется воспользоваться
инспектором объектов. Он обычно всегда на экране в левой части, вызывается командой
главного меню View > Object Inspector (Просмотр > Инспектор объектов) или нажатием на
клавишу F11.

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

Составляющие части программы (прежде всего элементы управления) представляют


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

В Инспекторе объектов показывается список свойств, связанный с текущим элементом,


выделенным на форме. Такое выделение обозначено черными маркерами по его границе в
дизайнере. При желании можно изменить размеры выделенного объекта с помощью этих
маркеров и рамки.

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


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

Инспектор объектов состоит из нескольких частей. В верхнем выпадающем списке можно


определить, какой элемент управления выбран в данный момент на форме. Центральная
часть Инспектора отведена под список свойств текущего выделенного на форме объекта.
Сам список разделен на две половинки. В левой части показано название свойства, в
правой - его текущее значение. Надпись, или название элемента управления хранится в
свойстве Caption. Выделим на форме наше поле и найдем в Инспекторе (в левом столбце)
это свойство. Щелкнем мышкой на подходящей строке - она выделится синим цветом. В
правой области, где находится значение данного поля Caption, появится текстовый курсор.
В данный момент выделенной в дизайнере у нас является поле-надпись, поэтому
значением данного свойства по умолчанию будет строка Label1 (она задается по
умолчанию и представляет собой комбинацию названия компонента Label и его
порядкового номера на форме). Изменим ее на новое значение, например "Моя метка".

http://russianenterprisesolutions.com/sbo/im/26.jpg

Вот как изменится и вид проектируемой формы в дизайнере:

http://russianenterprisesolutions.com/sbo/im/27.jpg

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

Теперь вам задание. Измените по схожему алгоритму название самой формы проекта с
умалчиваемого Form1 на например "Мой плеер". Для этого надо воспользоваться тем же
свойством Caption объекта-формы Form1.

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


программу, и случайно вместо дизайнера в другое окно переключитесь. И покажется у вас
на экране что-нибудь этакое:

http://russianenterprisesolutions.com/sbo/im/28.jpg

Жутковато выглядит?

Это как раз и есть редактор исходных текстов программы! В первом занятии я упоминал,
что текст программы можно набирать в блокноте, но лучше в специализированном
редакторе. Вот-вот, это тот самый, специализированный :)
Можете его просто закрыть :) Или переключиться из него в дизайнер, нажав клавишу F12.

В следующем занятии - завершаем музыкальный плеер в Delphi и делаем то же самое в


Microsoft Visual Studio.

Что не понятно, спрашивайте. Важно! Не поймете сейчас, дальше совсем запутаетесь.

Только не пишите "Ничего не поняла!" :) - укажите точное место в тексте, где ваше
понимание перешло в непонимание. Возможно, после этого от вашего непонимания уже
ничего и не останется :)

Напоминаю, как правильно выполнять задания.

1) Задания выполняются последовательно, начиная с первого, без пропусков.


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

Кстати, в абсолютном большинстве отчетов наблюдается общая особенность.


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

Из писем.

Обычно после подобных курсов вашему люди начинают рисовать мышкой програмулины,
не имея представления о том как они устроены внутри. И выходят с них даже не
кодеровщики, а непонятно кто! Кому такие на работу нужны?
Master_Boli

Вы-то откуда знаете, кто с них выходит? Сами там учились? :)

Наша цель - не устройство на работу. Наша цель - научиться создавать программы самого
высокого класса и при этом не зависеть ни от языка программирования, ни от среды
разработки. А уж как эти программы будут создаваться (рисованием мышкой или ручным
низкоуровневым кодированием и детальным изучением интерфейса Win32/.NET API),
значения не имеет. Главное, чтобы они уверенно делали то, для чего предназначены.

Кому надо, тот изучит, как программа внутри устроена, за один день. Ничего сложного
здесь нету.

Научившись же таким универсальным навыкам, вы сами уже и решите, к чему их лучше


приложить. Хотите - к работе, хотите - к созданию собственных программ на заказ или
для массовой продажи.

Случайно наткнулся на Ваш сайт по программированию, почитал и очень обрадовался!


Нравятся Ваши идеи и преподнесение материала.
Я в школе начал заниматься программированием на Бейсике, после армии продолжил его
освоение(урывками в Университете), сделал простенькую игру и на этом остановился.
Мне это было интересно. Своего рода решение головоломки. Сейчас мне бы честно
говоря хотелось бы программировать и зарабатывать на этом деньги. Какие не знаю, но
интересно попробовать. Любую вещь осваивать трудно без учителя и без конретных
заданий, ведущих к цели. Надеюсь, что Вы станете мне учителем, заранее благодарен.
Хотелось бы уточнить об уроках. У Вас есть базовый и платный. Я так понял что
базовый Вы публикуете постепенно? А платный должен идти после базового?
Адам

Я только что сделал вариант бесплатного обучения на всех платных курсах! С условиями
Вы можете познакомиться на страничке:

http://russianenterprisesolutions.com/sbo/free.html

На всех курсах Вы можете заниматься одновременно, если есть желание и хватит сил :)

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

Я так понимаю, что Вы уже умеете программировать, поэтому возможно базовый курс и
не так для Вас будет актуален. Базовый курс будет публиковаться постепенно и
достаточно долго. Впрочем, другие курсы тоже длятся достаточно долго, и главная их
особенность в том, что готовой схемы уроков, открытой заранее, там нет. Основной
принцип -- Вы получаете урок с заданием, делаете это задание, присылаете мне, и если все
сделано правильно, получаете следующее задание. То есть Вы подбираете сами
оптимальный темп учебы, а обучение происходит только через практику, что гарантирует,
что Вы в конце курса получите все нужные навыки (если не бросите, конечно :). Ну и
консультацию в случае затруднения всегда можете получить.

Вам надо решить, чего Вы конкретно хотите в программировании :) и потом выбрать


наиболее подходящий курс (или курсы).

Здравствуйте, хочу стать программистом, только натоящим, с большим количеством


денег.....
Все попытки стать программистом раньше разбивались о абсолютную непластичность
мысли :(.
При этом не глупа и общительна ;)Можно мне помочь?
Veronika

Нет ничего невозможного :)

Пишите сочинение на тему "Почему я хочу стать программисткой" :) А лучше -- "Что


такое настоящий программист".

Затем выбираете конкретный курс (например "Как заработать программированием") и я


вам даю тему для вступления на него.

Ну или просто оплачиваете выбранный курс без сочинений.

Или просто занимаетесь на базовом свободно.


Что касается непластичности мысли, то это присуще каждому из нас -- результат
"обучения" в школе, институте, да и часто работанию на работе, где думанию не обучают.
Кому нужен самостоятельно мыслящий сотрудник? :)

Я вот до сих пор добиться соответствующей (как у Эйнштейна :) мягкости мышления не


могу. Просто одни это осознали (вот Вы например :), а другие еще нет. Так что многих Вы
уже опередили.

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

Упражнение на развитие логических способностей.

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

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

* Проводится розыгрыш лото "5 из 90". Проводится по двум вариантам. В первом надо
угадать 5 выпавших шаров из 90 (вариант А), а во втором - 85 из 90 :) (вариант Б). По
книге "Многоцветная логика".

Вопросы.
1) В каком случае шансы на выигрыш больше - 5 из 90 или 85 из 90?
2) Что труднее:
угадать 4 шара из 5 в варианте А (берется 5 шаров из 90) или 84 из 85 (берется 85 шаров
из 90) в варианте Б?
угадать 3 шара в варианте А или 83 в варианте Б?
угадать 2 шара в варианте А или 82 в варианте Б?

Только, умоляю, не ищите готовых решений в книжках! Зачем?

И решайте это не математически (ни в коем случае никаких комбинаторных методов не


применяйте!), а только логически!

Упражнения на развитие творческих способностей (из книги "Кем мы можем быть" П.


Феруччи).

Эти и им подобные упражнения всегда очень желательно делать после интенсивной


интеллектуальной работы. А потом пойти подольше и подальше прогуляться :)

Зрительные представления

Закройте глаза и представьте следующее:

• Ручка медленно пишет на бумаге ваше имя.


• Однозначное число. Затем представьте двузначное число, трехзначное и т.д., пока
не достигнете числа, состоящего из такого количества цифр, которое вы еще
можете видеть. Удерживайте это число перед своим внутренним взором в течение
2 минут.
• Различные цветные фигуры: золотой треугольник, фиолетовый круг, голубая
пятиконечная звезда и т.д.

Тактильные представления

Представьте следующее, сосредоточиваясь теперь на ощущениях прикосновения:

• Вы жмете чью-то руку. Почувствуйте ее кожу, температуру, оказываемое ею


давление на вашу руку.
• Вы поглаживаете кошку или собаку. Почувствуйте их шерсть.
• Вы держите лимон. Почувствуйте его поверхность.
• Прикосновение к:
Коре дерева,
Только что выпавшему снегу,
Поверхности цветка - очень нежно, чтобы не помять его,
Песку,
Струе воды,
Перышку.

Обонятельные представления

Представьте, что вы вдыхаете запах:

• Ваших любимых духов,


• Бензина,
• Цветов,
• Травы,
• Чистого горного воздуха в сосновом лесу,
• Дыма костра,
• Океана,
• Мяты,
• Свежеиспеченного хлеба.

Кинестетические представления

А сейчас для получения кинестетических ощущений, благодаря которым мы сознаем свое


тело и его движения, представьте, что вы:

• Идете, а потом бежите вдоль берега по пляжу: почувствуйте каждое движение


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

Вкусовые представления

Представьте вкус, температуру и плотность:


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

Слуховые представления

Закройте глаза и прислушайтесь к следующим воображаемым звукам:

• Голос, произносящий ваше имя,


• Шум транспорта,
• Шум дождя,
• Голоса людей на вечеринке,
• Волны, набегающие на берег,
• Играющие дети,
• Скрип двери,
• Звук гонга, медленно растворяющийся в безмолвии.

Что вы чувствовали, выполняя эти упражнения? Серьезное напоминание: крайне важно не


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