C++ Builder Введение

Коробицин Владимир Михайлович

Урок 1

Введение

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15
for (i=0; i<1000; i++) { s = s + a[i] };

Урок 6

Урок 7

24 мая 2007

Бурное развитие информационных технологий, без которых немыслимо современное человечество, привело к созданию систем программирования обеспечивающих быструю разработку приложений для самой распространенной операционной системы Windows. К таким системам программирования относятся Microsoft Visual Basic, Borland Delphi и сравнительно недавно появившаяся система программирования Borland C++ Builder. Системы быстрой разработки основываются на технологии визуального проектирования и событийного программирования. Программирование в подобных системах сводится в основном к наглядному строительству приложения из готовых компонентов, которые содержит сама среда и к написанию функций обработки тех или иных событий, на которые способна реагировать Windows. У программиста высвобождается масса времени из-за того, что среда автоматически генерирует большую часть программного кода. Это время можно употребить на творчество в логике программы – следовательно, сделать приложение более полезным и интересным.

Предлагаемое учебное пособие поможет новичку уверенно сделать первые шаги в визуальном объектно-ориентированном программировании в среде Borland C++ Builder6. Английское Builder означает – строитель, созидатель. На протяжении всех уроков обучение построено на основе практических примеров по созданию приложений для Windows. В пособии предлагаются простые алгоритмы, требующие написания минимального программного кода, дабы не оттолкнуть начинающего.


C++ Builder Урок 6

Извлечение из компьютера системного времени и даты. Назначение клавиш. Экранная заставка для Windows

На стартовой форме разместите два уже знакомых вам компонента: поле вывода текста Label1 и таймер Timer1. В окне свойств объектов Object Inspector для компонента Timer1 его свойству Interval установите значение 1000 миллисекунд. Функцию обработки Timer1Timer заполните инструкцией:

Label1->Caption = Now(); //вывод даты и времени

Функция Now() выдает значение системной даты и времени, в буквальном переводе английское Now соответствует русскому слову «теперь». Запустите приложение. На его форме в поле вывода текста через одну секунду отобразятся текущая дата и время. Благодаря таймеру каждую следующую секунду эта информация будет обновляться. Вы заметили, что при запуске приложения первую секунду в поле вывода текста отображается надпись «Label1». Чтобы избежать это, в окне свойств объектов для компонента Label1 его свойству Caption придайте значение пустого множества. Если хотите, чтобы дата и время появились после запуска приложения быстрее можно для компонента Timer1 уменьшить значение его свойства Interval, например, до 10 миллисекунд.

Для получения системной даты или времени отдельно можно воспользоваться функциями преобразования DateToStr(dt) и TimeToStr(dt). Функция DateToStr(dt) выдает строку символов, отображающую дату в формате dd.mm.yyyy (число, месяц, год). Функция TimeToStr(dt) выдает строку символов, отображающую дату в формате hh:mm:ss (часы, минуты, секунды). Для исследования этих функций откройте новый проект приложения с компонентами Label1, Label2 и Timer1. Инструкции программного кода в функции обработки Timer1Timer будут выглядеть так:

Label1->Caption = DateToStr(Now()); //вывод даты

Label2->Caption = TimeToStr(Now()); //вывод времени

Такого же результата можно добиться следующими инструкциями:

Label1->Caption = Date(); //показать дату

Label2->Caption = Time(); //показать время

Функция DayOfWeek() (День недели) способна выдать номер дня недели, соответствующий дате, которая указывается в скобках как параметр этой функции. Причем 1 – воскресенье, 2 – понедельник и так далее. Проверьте работу функции DayOfWeek(). Добавьте на форму компонент Label3 и напишите инструкцию:

Label3->Caption = DayOfWeek(Now()); //вывод на экран номера дня недели

Для пользователя информация о дне недели будет восприниматься проще, если на экране отобразится не «4», а «Среда». Тогда программный код может выглядеть, например, так:

// вывод на экран названия дня недели

if (DayOfWeek(Now()) == 1) Label3->Caption = ”Воскресенье”;

if (DayOfWeek(Now()) == 2) Label3->Caption = ”Понедельник”;

if (DayOfWeek(Now()) == 3) Label3->Caption = ”Вторник”;

if (DayOfWeek(Now()) == 4) Label3->Caption = ”Среда”;

if (DayOfWeek(Now()) == 5) Label3->Caption = ”Четверг”;

if (DayOfWeek(Now()) == 6) Label3->Caption = ”Пятница”;

if (DayOfWeek(Now()) == 7) Label3->Caption = ”Суббота”;

Самостоятельно поэкспериментируйте с другими функциями манипулирования датой и временем. Для этого обратитесь к соответствующей таблице расположенной в конце данного пособия.

А теперь посмотрим, как можно построить управление приложением с клавиатуры. Откройте новый проект. В функцию обработки FormKeyDown (Клавиша внизу) запишите программный код:

//если нажать на клавишу <A> то генерируется звук

//частотой 440 Гц (нота Ля) длительностью 0,2 сек

if (Key == 'A') Beep(440,200);

//если нажать на клавишу <Пробел> то изменится цвет формы на красный

if (Key == ' ') Form1->Color = clRed;

if (Key == 27) Close(); //если нажать на клавишу <Esc> то выход

Запустите приложение на исполнение. Проверьте реакцию вашего приложения на нажатие соответствующих клавиш. Строку программного кода:

if (Key == 'A') Beep(440,200);

можно записать и по-другому, указав на код «65» этой клавиши:

if (Key == 65) Beep(440,200);

Существует специальная таблица кодов клавиш. Для того чтобы эта таблица всегда была у вас под рукой, напишите простейшую программу «Коды клавиш». Откройте новый проект. В функцию обработки FormKeyDown впишите единственную инструкцию:

Label1->Caption = Key; //код нажатой клавиши

Запустите приложение. При нажатии на клавишу <A> на экране появится ее код – 65, <S> – 83, <Enter> – 13 и так далее. Остановите работу приложения. В заголовок формы поместите надпись «Коды клавиш». Для компонента Label1 его свойству Caption задайте значение «Нажимай на клавиши». Создайте исполняемый EXE-файл. Протестируйте вновь созданное приложение.

Рассмотрим технологию создания экранной заставки для Windows. Откройте новый проект. Для того чтобы экранная заставка закрывалась при клике мышью, в функцию обработки FormMouseDown (Кнопка мыши внизу) впишите инструкцию:

Close(); //закрытие экранной заставки при клике мышью

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

if (Key = '*') Close(); //при нажатии любой клавиши закрыть заставку

Знак «*» в данном случае интерпретируется как нажатие любой клавиши. Проверьте работоспособность обеих этих инструкций.

А теперь сделаем так, чтобы заставка занимала всю площадь экрана вашего дисплея. Свойству WindowState (Статус окна) стартовой формы Form1 установите значение wsMaximized (Максимальный размер окна), а свойству BorderStyle (Стиль границы окна) установите значение bsNone (Отсутствие границы). Посмотрите, как теперь выглядит экранная заставка.

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

Когда приложение-заставка будет завершено, необходимо исполняемый файл вашего приложения переименовать, а именно его расширение EXE заменить на расширение SCR. Затем этот файл вместе с файлом мелодии нужно скопировать в каталог Windows\System32. Установить и настроить заставку для работы на вашем компьютере можно, нажав правой кнопкой мыши на рабочий стол, выбрать команду «Свойства», а затем вкладку «Заставка».

Урок шестой

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7
Азбука Visual Basic


C++ Builder Урок 7

Построение многооконных приложений для Windows. Календарь. Генератор звуковых волн

После запуска C++ Builder в вашем распоряжении имеется только одна форма Form1 – стартовая форма будущего приложения для Windows. Если вы хотите построить приложение, использующее в своей работе, например, три окна – кликните мышью на значок New Form (Новая форма) два раза. Вы получили две новые формы: Form2 и Form3. Такого же результата можно добиться по-другому. А именно в меню File выберите команду New, а затем Form. Во время работы приложения на экране могут одновременно отображаться все три формы, или любые две, либо любая одна из них. Для того чтобы из любой формы можно было управлять остальными формами, их файлы Unit1.h, Unit2.h и Unit3.h необходимо связать. В заголовочной части файла Unit1.cpp для первой формы нужно дописать директивы:

#include "Unit2.h" //включить вторую форму в проект

#include "Unit3.h" //включить третью форму в проект

Расположите их под уже имеющейся директивой, которую сгенерировала сама среда разработки во время создания первой формы:

#include "Unit1.h" //включить первую форму в проект

Для второй и третьей форм сделать аналогичные записи в файлах Unit2.cpp и Unit3.cpp. После этого формы начнут «чувствовать» друг друга – станет возможно управление из любой формы оставшимися другими. Если в процессе разработки многооконного приложения какая-либо из форм окажется недоступной, для ее появления на экране выберите в меню View (Просмотр) команду Forms… (Формы) или с клавиатуры отработайте клавишный аккорд Shift+F12. Можно просто кликнуть на соответствующий значок с изображением нескольких форм.

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

Form3->Show(); //показать третью форму

Убрать эту форму с экрана без выгрузки из оперативной памяти можно с помощью инструкции:

Form3->Hide(); //скрыть третью форму

Полностью закрыть форму можно с помощью инструкции:

Form3->Close(); //выгрузить третью форму

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

Создайте приложение на базе трех форм и свяжите их между собой. Общие размеры всех форм уменьшите примерно в два раза и расположите их пока произвольно в разных частях экрана. Измените заголовки каждой формы приложения. Пусть окна будут называться: «Главное меню», «Электронные часы. Календарь» и «Виртуальный генератор звуковых волн». Снабдите первую и вторую форму подходящими фоновыми рисунками с помощью знакомого уже вам компонента Image.

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

Form2->Show(); //показать вторую форму

Form1->Hide(); //скрыть первую форму

Затем для второй кнопки напишите функцию обработки Button2Click:

Form3->Show(); //показать третью форму

Form1->Hide(); //скрыть первую форму

На второй форме установите электронную кнопку для возврата в главное меню и снабдите ее надписью «Назад». Напишите для нее функцию обработки Button1Click:

Form1->Show(); //показать первую форму

Form2->Hide(); //скрыть вторую форму

Обустройте третье окно аналогично второму, соответственно изменив программный код. У второй и третьей форм удалите три кнопки управления окном. Для этого обратитесь к их составному свойству BorderIcons, которое отвечает за вид окна, кликнув на «плюс». Чтобы исчезли кнопки управления окном, свойству biSystemMenu (Системное меню) придайте значение false.

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

На вторую форму добавьте компоненты Label1 и Label2. Сюда же установите компонент Timer1 из вкладки System и компонент MonthCalendar1 (Ежемесячный календарь) из вкладки Win32. Для компонента Timer1 его свойству Interval придайте значение 10. В функцию обработки Timer1Timer запишите инструкции:

Label1->Caption = Date(); //показать дату

Label2->Caption = Time(); //показать время

Через каждую одну сотую секунды (10 миллисекунд) дата и время будут обновляться. Если вы хотите чтобы дата и время одновременно выводились в одном поле вывода текста Label1, то две предыдущие инструкции можно заменить одной:

Label1->Caption = Now(); //показать дату и время

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

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

На третью форму добавьте компоненты Button2, Label1, TrackBar1, Image1, Image2. Компонент TrackBar1 (Движок-регулятор) можно извлечь из вкладки Win32. Ширину компонента TrackBar1 увеличьте примерно в два-три раза. Свойству Max (Максимальное положение движка) этого компонента придайте значение 50. Очистите свойство Caption у компонента Label1. В функцию обработки Button2Click впишите инструкцию, которая будет генерировать колебания звуковой частоты:

Beep(TrackBar1->Position*100, 1000); //звук

Этот оператор, отвечающий за генерацию звука, имеет два аргумента. Первый задает частоту звука в герцах, второй – длительность в миллисекундах. Свойство Position (Позиция движка) компонента TrackBar1 управляет изменением частоты звука. В нашем случае можно получить звук частотой от 100 до 5000 Гц с шагом в 100 Гц длительностью в одну секунду. Электронную кнопку Button2Click назовите «Пуск». Генератор уже работоспособен, но для вывода информации о частоте звука необходимо в функцию обработки TrackBar1Change (Изменение позиции движка) записать инструкцию:

Label1->Caption = "Частота звука = " +

IntToStr(TrackBar1->Position)*100 + " Гц";

Заметьте, здесь одна инструкция записана с переносом, а поэтому расположилась в двух строках.

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

Добавьте в окно генератора простейшую анимацию. Для этого вставьте два подходящих изображения, которые будут отображать состояние генератора, в поля компонентов Image1, Image2. Этими изображениями могут быть, например, обезьяна в двух разных состояниях. Когда генератор молчит – обезьяна в задумчивости, когда присутствует звук – обезьяна улыбается разводит руки. Оба изображения наложите, друг на друга, так как появляться они будут в разное время. Свойству Visible компонента Image2 придайте значение false. Теперь функция обработки Button2Click будет выглядеть так:

Beep(TrackBar1->Position*100, 1000); //звук

Image1->Visible = true; //показать первый рисунок

Image2->Visible = false; //скрыть второй рисунок

Необходимо так же будет написать функцию обработки Button2MouseDown:

Image1->Visible = false; //скрыть первый рисунок

Image2->Visible = true; //показать второй рисунок

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

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

Урок седьмой

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6


C++ Builder Урок 2

Мультимедийное приложение. Компонент проигрыватель мультимедиа и его свойства

Наполните ваше приложение звуками и видео. Очень быстро этого можно достичь, воспользовавшись компонентом MediaPlayer (Проигрыватель мультимедийных файлов). Во вкладке System (Системные компоненты) выберите компонент MediaPlayer и разместите его на форме Form1, где он автоматически получит имя MediaPlayer1. Кликните мышью по форме два раза и в функцию обработки FormCreate события OnCreate (Наступает при открытии формы) впишите программный код:

MediaPlayer1->FileName = "c:\\Music\\Vesna.mid";

MediaPlayer1->Open(); //открыть файл

Первая строка у компонента MediaPlayer1 его свойству File Name (Имя файла) присвоит значение, которое укажет путь к определенному музыкальному файлу, находящемся на вашем компьютере. Вторая – метод компонента MediaPlayer, который открывает указанный файл для воспроизведения.

Запустите приложение. Кликните по кнопке «Воспроизведение» проигрывателя, зазвучит мелодия. Поочередно понажимайте другие кнопки проигрывателя. Ненужные вам кнопки проигрывателя скройте, изменив для его составного свойства VisibleButtons (Видимость кнопок) значение true на значение false.

Если вы хотите, чтобы мелодия зазвучала сразу же после запуска приложения, в этой же функции допишите строку – метод компонента MediaPlayer:

MediaPlayer1->Play(); //воспроизвести файл

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

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

MediaPlayer1->Pause(); //пауза

MediaPlayer1->Stop(); //остановка

и так далее, впрочем, о существовании этих и других свойств и методов компонента MediaPlayer вам подскажет всплывающая подсказка в среде Borland C++ Builder.

Аналогичным образом заставьте в вашем приложении работать любой звуковой файл с расширением WAV, а затем и какой-либо видео-файл, например, с расширением AVI.

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

А теперь вы уже сможете построить универсальный мультимедиа-проигрыватель для воспроизведения любых мультимедийных файлов. В новом проекте на форме поместите знакомый уже вам компонент MediaPlayer1. Во вкладке Dialogs (Окна общего диалога) кликните кнопку OpenDialog (Окно открытия файла), а затем кликните на форме Form1. На форме появится невидимый во время работы приложения компонент с именем OpenDialog1. Создайте электронную кнопку Button1, кликните на нее два раза и в процедуру прерывания Button1Click запишите программный код:

OpenDialog1->Execute(); //вызов окна открытия файла

MediaPlayer1->Close(); //закрытие файла

//передача имени файла из окна общего диалога проигрывателю

MediaPlayer1->FileName = OpenDialog1->FileName;

MediaPlayer1->Open(); //открытие файла

В первой строке для вызова окна «Открытие файла» применена функция Execute (Выполнить). Вторая строка нужна на тот случай, если в проигрыватель будет загружаться более одного файла, ведь перед открытием следующего необходимо закрыть предыдущий файл. Работа остальных строк программного кода понятна из их комментариев.

Снабдите кнопку Button1 надписью «Открыть». Разместите на форме компонент Label1, и в процедуре Button1Click допишите инструкцию:

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

Label1->Caption = MediaPlayer1->FileName;

В заголовке формы запишите: «Универсальный проигрыватель». Скройте кнопку управления окном «Развернуть». Для этого в составном свойстве BorderIcons (Кнопки управления окном) свойству biMaximize (Определяет доступность кнопки «Развернуть») присвойте значение false. Разместите на форме подходящую картинку, как это сделать – вы уже знаете. Откомпилируйте проект. Опробуйте ваш универсальный проигрыватель в работе, поочередно загружая мультимедийные файлы с расширениями WAV, MID, MP3, WMA, RMI, AVI и другие.

Изготовьте проигрыватель для воспроизведения лазерных дисков, записанных в обычном музыкальном формате. Откройте новый проект. Установите на стартовой форме Form1 компонент MediaPlayer1. В окне Object Inspector для свойства DeviceType (Назначает тип устройства для воспроизведения) установите значение именованной константы dtCDAudio (CD-проигрыватель). А для свойства AutoOpen установите значение true. В привод CD-дисков установите компакт-диск обычного музыкального формата. Запустите приложение. Теперь остается кликнуть мышью на кнопку «Воспроизведение». Опробуйте действие остальных кнопок проигрывателя. Перед закрытием приложения обязательно нажмите на кнопку «Стоп». Ненужные кнопки скройте от взора пользователя, изменив значение знакомого вам составного свойства VisibleButtons компонента MediaPlayer1.

На тот случай, если пользователь перед закрытием приложения забудет нажать на кнопку «Стоп» необходимо в функцию обработки FormClose (Закрытие формы) записать строки:

MediaPlayer1->Stop(); //остановка

MediaPlayer1->Close(); //закрытие

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

Label1->Caption = "Дорожек на диске " + IntToStr (MediaPlayer1->Tracks);

Обратите внимание, здесь для удобства одна инструкция в редакторе кода записана в две строки. Эта инструкция на форме через поле вывода текста Label1 информирует пользователя о числе дорожек на данном диске. Где Tracks – это свойство компонента MediaPlayer, которое указывает на количество треков на открытом устройстве Audio CD. Функция преобразования IntToStr переводит целое число треков на диске в строковую переменную изображающую это число. Это преобразование необходимо из-за того, что свойство Caption компонента Label может принимать значения только строкового типа. Не забудьте откомпилировать проект.

Если вы хотите изменить стандартную иконку C++ Builder вашего исполняемого файла, то в меню Project (Проект) выберите Options… (Установки…) и во вкладке Application (Приложение) нажмите кнопку Load Icon… (Загрузка иконки…). Теперь можно выбрать нужную иконку с расширением ICO из имеющихся на вашем компьютере.

Урок второй

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6


C++ Builder Урок 8-15

Полный вариант учебного пособия

Урок 1. Знакомство со средой программирования Borland C++ Builder. Компоненты: форма, поле вывода текста, образ, электронная кнопка и их свойства. Событие и функция обработки события. Компиляция проекта

Урок 2. Мультимедийное приложение. Компонент проигрыватель мультимедиа и его свойства

Урок 3. Простейший графический редактор. Реакция приложения на различные кнопки мыши. Построение системы меню

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

Урок 5. Простейшие приемы построения анимации. Компонент таймер и его свойства

Урок 6. Извлечение из компьютера системного времени и даты. Назначение клавиш. Экранная заставка для Windows

Урок 7. Построение многооконных приложений для Windows. Календарь. Генератор звуковых волн

Урок 8. Приложение с окном произвольной формы. Обнаружение некоторых характеристик компьютера

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

Урок 10. Случайные числа. Создание и обработка одномерных массивов

Урок 11. Многомерные массивы и их обработка. Компонент: поле ввода-редактирования строки символов Edit

Урок 12. Вычисление определенного интеграла методом прямоугольников и методом трапеций

Урок 13. Генератор квадратных уравнений. Решение квадратных уравнений

Урок 14. Магические числа. Ряд Фибоначчи

Урок 15. Работа со строками. Англо-русский и русско-английский словарь

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

Другие мои работы можно взять здесь: Архив учебных программ — «Персональный компьютер», «Азбука Visual Basic», «Простой графический редактор».

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6


C++ Builder Урок 1

Урок первый

Знакомство со средой программирования Borland C++ Builder6. Компоненты: форма, поле вывода текста, образ, электронная кнопка и их свойства. Событие и функция обработки события. Компиляция проекта

После запуска C++ Builder в верхней части экрана вашего компьютера вы увидите главное окно, содержащее систему меню и палитру компонентов, состоящую из множества вкладок, каждая из которых включает в себя свой набор компонентов (объектов). В главном окне расположены так же некоторые часто используемые быстрые кнопки, которые дублируют основные команды системы меню. Как правило, в левой части экрана расположено окно Object TreeView (Окно списка объектов). Немного ниже находится окно Object Inspector (Окно свойств объектов). Это окно разбито на две вкладки Properties (Свойства) и Events (События). В центре экрана вы увидите окно стартовой формы с именем Form1, это и есть ваше будущее приложение для Windows! Это самый главный компонент – фундамент, на котором вы будете строить вашу программу, используя другие необходимые компоненты. Ну и, конечно же, в этом строительстве вы непременно будете заниматься написанием программного кода, который будет отвечать за логику программы. Строки вашей программы вы будете размещать в окне редактирования программного кода, которое можно вызвать, например, кликнув два раза мышью по форме Form1. Это окно имеет и более короткое название – редактор кода. При наборе текста программы редактор кода автоматически выделяет ключевые слова полужирным шрифтом, а комментарии курсивом. Так с первого взгляда будет выглядеть мощная среда программирования Borland C++ Builder. Запустить проект вашего будущего приложение для Windows можно прямо сейчас. Для этого достаточно нажать на функциональную клавишу F9 или кликнуть мышью на кнопку Run в виде зеленого треугольника, находящейся в главном окне. И третья возможность – воспользуйтесь системой меню. После запуска проекта приложения не забудьте завершить его работу стандартным для Windows-приложений образом.

Для начала познакомимся с некоторыми свойствами компонента форма. В окне Object Inspector найдите свойство Color (Цвет) компонента Form1. Установите для этого свойства значение clPurple (фиолетовый). Значение этого же свойства можно изменить во время работы приложения программным способом. Вызовите окно программного кода, кликнув на форму два раза. Затем в окне Object Inspector выберите вторую вкладку Events и кликните на событие OnClick (одиночный клик мышью). Рядом появится небольшое поле ввода. Кликните по этому полю два раза – в окне программного кода появится функция FormClick обработки события OnClick (одиночный клик мышью по форме). В данную процедуру прерывания внутри фигурных скобок впишите инструкцию:

Form1->Color = clRed;

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

void __fastcall TForm1::FormClick(TObject *Sender)

{

Form1->Color = clRed; //красный цвет для формы

}

Среда быстрой разработки C++ Builder автоматически оформляет подобным образом и другие функции обработки событий, понимаемых операционной системой Windows. Здесь словосочетание fastcall буквально означает – быстрый вызов. В нашем примере это быстрый вызов функции FormClick обработки события OnClick. Любая функция обработки события начинается с открывающейся фигурной скобки и завершается закрывающейся фигурной скобкой. Внутри этих скобок вы будете записывать одну или несколько инструкций, которые компьютер должен выполнить при наступлении указанного события. Запись каждой инструкции должна обязательно заканчиваться точкой с запятой.

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

Измените заголовок формы вашего приложения. В окне Object Inspector выберите свойство Caption (Надпись) и запишите в поле ввода новое значение, например, «Мое первое приложение для Windows».

Разместите на форме какой-либо текст. Для чего во вкладке Standard (Стандартные компоненты) панели управления выберите компонент Label (Поле вывода текста), кликнув на значок с изображением буквы «А» и поместите объект Label1 на форме. В окне Object Inspector для свойства Caption задайте новое произвольное значение, например, «Волшебная страна Borland C++ Builder». Увеличьте размер шрифта надписи. Воспользовавшись составным свойством Font (Шрифт), кликните на «плюс» и ниже выберите Size (Размер). Измените размер шрифта с «8» на «24». Выкрасите надпись в желтый цвет: выберите свойство Color и измените его значение на clYellow.

Теперь разместите на форме вашего приложения два изображения. Достигнуть поставленной цели можно, применив компонент Image (Образ). Достаньте этот компонент из панели управления, кликнув по вкладке Additional (Дополнительные компоненты), а затем на кнопку Image. Для установки указанного компонента на форме вашего приложения, кликните по форме в любой ее свободной области. На форме появится область, очерченная пунктирной линией. Новый объект автоматически получает имя – Image1. Теперь необходимо загрузить в этот компонент какое-либо небольшое по размерам изображение, имеющееся на вашем компьютере. В окне Object Inspector, во вкладке Properties, воспользовавшись полосой прокрутки, выберите одно из многочисленных свойств компонента Image – свойство Picture (Рисунок), кликнув по нему мышью. Рядом вы увидите значение этого компонента – None (Нет). Кликните по кнопке с изображением многоточия, и тут же появится окно для загрузки изображения Picture Editor. Нажмите на кнопку Load (Загрузка) и выберите нужный вам рисунок или фотографию, например, с расширением BMP. После того как картинка окажется на форме, размеры полезной области объекта Image1 можно откорректировать вручную. Еще проще это сделать, если у свойства AutoSize (Авторазмер) его значение false (ложь) изменить на новое значение true (истина), например, кликнув по надписи false два раза. Перетащите изображение, удерживая мышью, в нужную вам часть формы. Подобным образом разместите на форме еще одно изображение. Если появится необходимость, то измените размеры самой формы с помощью мыши до запуска проекта. Запустите проект приложения на выполнение, а затем закройте его.

Если выбранный вами рисунок имеет фон одного цвета, то этот фон при необходимости можно сделать прозрачным, то есть невидимым. Для этого установите свойству Transparent (Прозрачность) значение true.

Если вы хотите изменить размеры изображения, то свойству Stretch (Растяжение) придайте значение true. При этом для свойства AutoSize обязательно установите значение false. К сожалению изображения формата BMP при изменении размера теряют в качестве, а вот виндовские резиновые файлы изображения формата WMF таким недостатком не обладают.

Посмотрим, как можно смонтировать на форму электронную кнопку. Во вкладке Standard панели управления выберите компонент Button (электронная кнопка) и разместите ее на форме. Кликните по вновь созданной кнопке Button1 два раза, и вы окажетесь в функции обработки Button1Click (кликнуть на кнопку). В эту событийную процедуру прерывания впишите инструкцию:

Image1->Visible = false; //скрыть первый рисунок

Это значит, что для компонента Image1 его свойству Visible (Видимость) будет присвоено значение false, что приведет к исчезновению первого рисунка. Запустите проект и проверьте работоспособность электронной кнопки. Изготовьте еще одну кнопку, которая будет заставлять рисунок вновь появляться. Для второй кнопки понадобится инструкция:

Image1->Visible = true; //показать первый рисунок

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

Close(); //завершение работы приложения

Проверьте работоспособность созданной кнопки и поместите на ней надпись «Выход», изменив значение свойства Caption.

Для того чтобы сохранить проект приложения, в меню «File» (Файл) выберите команду «Save Project As…» (Сохранить проект как…), выберите нужные вам диск и папку. Сохраните проект. Если вы захотите доработать проект или просмотреть его программный код, кликните по файлу проекта с расширением BPR.

Для создания исполняемого файла вашей программы с расширением EXE зайдите в меню «Project», выберите команду «Make Project1» (Изготовить проект) или с клавиатуры отработать клавишный аккорд Ctrl+F9. Такой процесс сборки файлов проекта в единый EXE-файл называется компиляцией. Исполняемый самостоятельный файл можно перенести на другой компьютер. В том случае, если ваше приложение является мультимедийным, то файлы музыки, звука, видео, например, MID, MP3, WAV, AVI нужно будет скопировать вместе с исполняемым файлом. А вот файлы изображений переносить не надо, так как они впитываются в исполняемый файл в процессе компиляции.

Если вы хотите избавиться от проблем с установкой вашей программы на другом компьютере, связанных с отсутствием на нем необходимых библиотек, то следует изменить некоторые свойства проекта. Для этого войдите в меню «Project», выберите команду «Options…» во вкладке «Linker» уберите галочку «Use dynamic RTL», а во вкладке «Packages» уберите галочку «Build with runtime packages». В первом случае в EXE-файл включается RTL-библиотека времени выполнения, а во втором – динамические библиотеки в которых находятся используемые компоненты и системные функции. При этом размер исполняемого файла существенно увеличится, зато теперь вы сможете перенести его на другой компьютер простым копированием. Файл останется работоспособным также после переустановки операционной системы Windows на вашем компьютере.

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6


C++ Builder Урок 3

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Простейший графический редактор. Реакция приложения на различные кнопки мыши. Построение системы меню. Управление принтером

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

На стартовой форме Form1 разместите компонент Image1 из вкладки Additional. У компонента Form1 для его свойства Color установите значение clWhite (Цвет белый). Свойству Caption этого компонента установите значение «Альбом для рисования». В функцию обработки FormMouseDown (При нажатии кнопки мыши) запишите строку:

Image1->Canvas->LineTo(X, Y); //рисовать линию

Canvas (канва, холст) – это свойство компонента Image, представляющее из себя поверхность для вывода графики. На этой поверхности метод LineTo (Линия в) будет вычерчивать прямую линию от точки текущей позиции в точку с координатами, где окажется курсор при нажатии кнопки мыши. Запустите приложение, порисуйте мышкой. Очевиден недостаток такого рисования – вы не можете задать начальную точку траектории движения карандаша! Для разрешения этой проблемы используем метод MoveTo (Перемещение в), который будет в работе программы перемещать текущую точку в новую позицию без рисования линии. Возникает другая проблема – как с помощью мыши пользователь сможет сообщить: рисовать дальше или начать с новой позиции? Благо, что мышка имеет как минимум две кнопки. Научим приложение чувствовать разницу между левой и правой кнопками мыши. Для этого придется функцию обработки FormMouseDown немного усложнить:

if (Button == mbLeft) Image1->Canvas->LineTo(X, Y);

if (Button == mbRight) Image1->Canvas->MoveTo(X, Y);

Button – кнопка мыши. Первое условие if (если) разрешает левой кнопке мыши рисовать линию. Второе условие разрешает правой кнопке перенести точку рисования в новую позицию. Посмотрите, как теперь работает приложение.

Пока в распоряжении пользователя единственный цвет карандаша. Расширим возможности приложения. Выберите из палитры компонентов во вкладке Standard компонент MainMenu (Система меню) и разместите его на форме под именем MainMenu1, предложенном средой C++ Builder по умолчанию. Кликните по этому объекту мышкой два раза: появится окно, имитирующее вид формы с будущей системой меню, это и есть наглядный редактор меню. В начале редактор покажет один прямоугольник-заготовку пункта меню. Для превращения заготовки в рабочий пункт меню нужно свойству Caption придать значение произвольного необходимого названия, например, «Файл». После этого внизу появится прямоугольник первой команды меню, а справа прямоугольник следующего пункта меню. Постройте систему меню, так как показано на рисунках. Любая команда может вызывать вторичное (дочернее) меню. Чтобы выстроить вторичное меню кликните по необходимой команде, затем отработайте клавишный аккорд Ctrl+Right (Одновременное нажатие Ctrl и курсора «Вправо»). Для того чтобы эта система меню заработала, необходимо написать функции обработки событий нажатия на пункты и команды меню.

Начнем с написания функции обработки команды меню «Цвет рисования». Для этого в режиме создания приложения кликните мышью по пункту меню «Режим», а затем по команде этого пункта «Цвет рисования». В окне редактирования программного кода появится заготовка функции обработки команды меню «Цвет рисования». Наполните эту функцию обработки программным кодом:

//вызов окна диалога ЦВЕТ для выбора цвета рисования

ColorDialog1->Execute();

//передача цвета перу холста из окна диалога ЦВЕТ

Image1->Canvas->Pen->Color = ColorDialog1->Color;

Pen (Перо) – свойство поверхности Canvas. Color (Цвет), это свойство объекта Pen. Запустите приложение на выполнение и порисуйте разными цветами. Теперь в распоряжении пользователя палитра с огромным числом цветов. Это число ограничивается только возможностями видеокарты вашего компьютера. Если видеокарта 16-битная, то глубина цвета на экране дисплея составляет 16 бит, а количество возможных цветов равно 216 = 65 536. Современные видеокарты являются, как правило, 32-битными, поэтому число возможных цветов оказывается равным 232 = 4 294 967 296.

Команда «Толщина линии» меню «Режим» позволит пользователю менять толщину следа рисования. Эта команда будет вызывать вторичное (дочернее) меню, содержащее команды задающие размер следа рисования. Команды вторичного меню имеют названия «1», «2», «5», «10» и «20». Кликните, например, на команду «5» и появившуюся заготовку функции обработки запишите инструкцию:

Image1->Canvas->Pen->Width = 5; //задать ширину пера равную пяти

Здесь Width (Ширина), это свойство объекта Pen. Остальные команды вторичного меню оживите аналогичными инструкциями. Теперь процесс рисования станет интереснее. Опробуйте новые возможности приложения.

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

//вызов окна диалога ЗАПИСЬ ГРАФИЧЕСКОГО ФАЙЛА

SavePictureDialog1->Execute();

//изображение из поля Image1 записать в файл

Image1->Picture->

SaveToFile(SavePictureDialog1->FileName + ".bmp");

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

Обработайте следующую команду меню «Файл» – «Открыть». Эта команда позволит пользователю считать с диска свой или чужой рисунок, для его просмотра или редактирования. Функция обработки этой команды меню может содержать программный код:

//вызов окна диалога ОТКРЫТИЕ ГРАФИЧЕСКОГО ФАЙЛА

OpenPictureDialog1->Execute();

if (OpenPictureDialog1->FileName != "") //если в окне диалога есть файл

{

//загрузка файла в поле Image1 с диска

Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

//ширину Image1 сравнять с шириной загружаемого изображения

Image1->Width = Image1->Picture->Width;

//высоту Image1 сравнять с высотой загружаемого изображения

Image1->Height = Image1->Picture->Height;

}

Составной знак «!=» означает – «не равно». Две рядом расположенные кавычки означают пустое множество. Условие if (если) проверяет наличие файла в поле окна диалога «Открытие графического файла». Если условие выполняется, идет загрузка файла и центровка изображения на экране, иначе инструкции в фигурных скобках не выполняются. Функция LoadFromFile (Загрузить из файла) позволяет считывать информацию с диска. Проверьте работоспособность вновь созданной команды меню.

Урок третий

Borland C++ Builder

Borland C++ Builder

Borland C++ Builder

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6


C++ Builder Урок 4

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

В первом уроке вы уже пользовались компонентом Image, служащем в основном для размещения изображения на форме. Воспользуемся этим компонентом для создания простейшей программы, позволяющей просматривать файлы изображений. Разместите компонент Image1 на форме Form1 так чтобы его размеры были примерно равны размерам формы. Для открытия файлов изображений понадобится компонент OpenPictureDialog (Окно для выбора графического файла), который находится во вкладке Dialogs (Окна общего диалога). Для стартовой формы Form1 его свойству WindowState (Статус окна) установите значение wsMaximized (Максимальное). Свойству AutoSize (Авторазмер) компонента Image1 установите значение true. Теперь размеры компонента Image1 будут автоматически выравниваться в соответствии с размерами просматриваемого изображения. В заголовок стартовой формы поместите надпись «Просмотр картинок». Напишите функцию обработки Image1Click:

//вызов окна диалога ОТКРЫТИЕ ГРАФИЧЕСКИХ ФАЙЛОВ

OpenPictureDialog1->Execute();

//поместить в поле Image1 загруженный с диска файл

Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

Вторая инструкция записана в двух строках. Эта инструкция в поле компонента Image1 с помощью его свойства Picture (Изображение) размещает графический файл, загруженный с диска посредством функции LoadFromFile (Загрузить файл по указанному пути), которая в круглых скобках должна содержать путь и имя файла. В нашем случае путь загружаемого файла и его имя передаются из окна диалога «Открытие графических файлов» посредством свойства FileName (Путь и имя файла).

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

Построенное приложение не позволяет просматривать очень распространенные графические файлы форматов JPG и JPEG. Графические файлы указанных форматов являются многократно сжатыми, а потому часто используются при хранении большого количества графической информации. Также формат JPG применяется для сжатия растровых изображений получаемых в матрице цифровой фотокамеры. Такое преобразование происходит непосредственно в фотокамере для экономии ее памяти. Чтобы избавить приложение от этого недостатка, нужно в заголовочной части файла Unit1.cpp записать директиву #include <jpeg.hpp>, которая обеспечит возможность работы в вашем приложении с графическими файлами форматов JPG и JPEG.

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

//перемещение изображения в центр формы

Image1->Left=Form1->ClientWidth/2-Image1->Width/2;

Image1->Top=Form1->ClientHeight/2-Image1->Height/2;

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

Проверьте, как повлияла добавка в программном коде на расположение изображения. Разберемся в логике этих инструкций. Первая из дописанных инструкций центрует изображение по горизонтали, вторая – по вертикали. Left – это свойство компонента Image, которое задает положение левого края компонента. Top – это свойство компонента Image, которое задает положение его верхнего края. Свойства Width (Ширина) и Height (высота) компонента Image определяют его размеры. Такие же свойства имеет форма, они для этого компонента отражают общие размеры окна вместе с рамкой. А вот свойства формы ClientWidth (Полезная ширина) и ClientHeight (Полезная высота) определяют площадь поверхности окна для размещения в нем других компонентов. Первая инструкция вычисляет координату левого края компонента Image так, что из половины ширины формы вычитается половина ширины компонента Image. Таким образом, осуществляется центровка изображения по горизонтали. Аналогично работает вторая инструкция, выполняя центровку изображения по вертикали.

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

//в заголовок формы поместить информацию о пути и имени файла

Form1->Caption = OpenPictureDialog1->FileName;

Настройте окно общего диалога «Выбор графического файла» по вашему усмотрению, воспользовавшись его набором свойств. Например, свойству Title (Название) компонента OpenPictureDialog1 можно установить значение «Выбери картинку». Поэкспериментируйте с другими свойствами этого компонента, в том числе с его составными свойствами.

Урок четвертый

Приложения

Windows

для

C++ Builder

Приложения

Windows

для

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6


C++ Builder Урок 5

Простейшие приемы построения анимации. Компонент таймер и его свойства

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

Таймер имеет совсем небольшой набор свойств по сравнению с другими компонентами C++ Builder, но обладает ничем неограниченными способностями ловко управлять работой приложения во временном пространстве с точностью до одной миллисекунды. Что бы поместить таймер на стартовую форму Form1, нужно кликнуть мышью в главном окне во вкладке System по кнопке Timer (Таймер) с изображением циферблата часов со стрелками, а затем по самой форме в любой ее рабочей части. Этот компонент во время работы приложения является невидимым. А вот во время построения проекта приложения таймер виден на форме, и поэтому программисту удобно в любое время быстро обратиться к его свойствам или к функции обработки Timer1Timer события OnTimer (Таймер включен). На форме можно установить столько таймеров, сколько вам необходимо. Важнейшим свойством компонента таймер является Interval (Интервал), значение которого по умолчанию составляет 1000 миллисекунд (одна секунда). Свойство Enabled (Разрешение работать) включает или же выключает таймер в зависимости от его значения (true или false). Значение этих свойств можно задать как до запуска проекта, так и изменять их программным способом во время работы проекта. Событие Timer1Timer наступает по истечении реального времени эквивалентного значению свойства Interval для таймера. До тех пор пока таймер не выключен, это событие будет наступать вновь и вновь.

Откройте новый проект. На форме расположите таймер Timer1, для его свойства Enabled установите значение false, а для свойства Interval значение 10 миллисекунд, что будет соответствовать одной сотой доле секунды.

В нашем случае кроме компонента таймер Timer понадобится компонент образ Image. Установите на форму компонент образ Image1. Подберите небольшой по размерам рисунок с изображением автомобиля и поместите его в образ Image1, используя свойство Picture. Свойству AutoSize придайте значение true. Установите для свойства Left значение в 15 единиц, для того чтобы автомобиль мог стартовать из левой части формы. Размеры формы измените с помощью мыши так, чтобы ее ширина была чуть меньше общей ширины экрана, а ее высота примерно в два раза превышала высоту автомобиля.

В функцию обработки Image1Click поместите строку программного кода:

Timer1->Enabled = true; //включить первый таймер

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

//перемещение автомобиля вправо на 30 единиц

Image1->Left = Image1->Left + 30;

Где, Left (левый край) это свойство компонента Image1. Значение этого свойства будет очень быстро нарастать. В результате получим эффект перемещения автомобиля по горизонтали. Запустите проект приложения на выполнение. Кликните мышью на автомобиль, и он устремится в бесконечность. Закройте приложение. Если вы хотите снизить скорость автомобиля, то приращение его перемещения в 30 единиц уменьшите до 15.

Заставим автомобиль в любое время возвращаться по велению пользователя на стартовую позицию по одиночному щелчку на форме. В функцию обработки FormClick запишите строку:

Image1->Left = 15; //возврат на стартовую позицию

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

Остановим автомобиль на середине формы. Для этой цели установите на форму второй таймер Timer2. Его свойству Enabled придайте значение false, а свойству Interval значение 145 (возможно это значение придется подобрать из-за другого разрешения вашего экрана по горизонтали). В функцию обработки Image1Click допишите строку:

Timer2->Enabled = true; //включить второй таймер

В функции обработки Timer2Timer события OnTimer напишите программный код:

Timer1->Enabled = false; //выключить первый таймер

Timer2->Enabled = false; //выключить второй таймер

Таким образом, при клике мышью по автомобилю включатся оба таймера. Первый таймер будет отвечать за перемещение автомобиля через каждые 10 миллисекунд, а второй таймер при достижении интервала времени в 145 миллисекунд выключит первый таймер для остановки автомобиля и выключится сам. Если кликнуть по автомобилю второй раз, он передвинется к правому краю формы. При третьем клике автомобиль покинет границы формы. Для его возврата на стартовую форму кликните мышью по форме. Проверьте, так ли работает приложение.

Анимация станет эффектнее, если ее озвучить. Для этого воспользуйтесь уже знакомым вам компонентом MediaPlayer. Его свойству Visible придайте значение false, для того чтобы в работе приложения этот компонент оказался невидимым. Подберите звуковой файл с расширением WAV, содержащий, например, «рев двигателя» или «скрип шин» протяженностью одна – две секунды. Скопируйте этот файл в папку вашего проекта. В функцию обработки Image1Click добавьте программный код, причем выше ранее записанных двух инструкций:

MediaPlayer1->Close(); //закрыть файл

MediaPlayer1->FileName = "Auto.wav";

MediaPlayer1->Open(); //открыть файл

MediaPlayer1->Play(); //воспроизвести файл

Аналогичным образом озвучьте возврат автомобиля на стартовую позицию файлом содержащем, например, «сигнал автомобиля». Можно воспользоваться уже установленным компонентом MediaPlayer1. Проверьте приложение в работе со звуковым сопровождением.

Урок пятый

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6

Урок 7

Урок 1

Введение

Урок 2

Урок 3

Урок 4

Урок 5

Урок 8-15

Урок 6