Графика и мультимедиа___________________________________359

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

PlaySound(О,О, SND_PURGE) ;

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

Оператор

PlaySound("С:\\Windows\\Media\\3ByK Microsoft.wav",0,SND_SYNC);

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

Все рассмотренные ранее операторы прерывали при своем выполнении звук,
который асинхронно воспроизводился в момент вызова PlaySound. Если же вы вы-
полните оператор с флагом SND_NOSTOP, например:

PlaySound("С:\\Windows\\Media\\3ByK Microsoft.wav",О,SND_SYNC I
SND_NOSTOP)

то в случае, если в этот момент драйвер занят воспроизведением другого звука, это
воспроизведение не будет прерываться, а функция PlaySound сразу вернет false.
Заказанного этим оператором звука вы не услышите, т.к. в очередь он не встанет.

Мы рассмотрели основные функции воспроизведения звука. В C++Builder
имеется также компонент MediaPlayer — универсальный проигрыватель аудио- и
видео-информации. Он будет рассмотрен в разделе 5.2.4.

5.2.2 Начала анимации — создание собственной мультипликации

А теперь давайте займемся движущимися изображениями. Но прежде, чем
учится просматривать готовые видеофайлы, попробуем свои силы в создании соб-
ственной анимации.

Каждый примерно представляет себе принципы создания мультипликацион-
ных фильмов, знает, что они представляют собой совокупность множества кадров,
каждый из которых чуть-чуть отличается от предыдущего. Это при быстром пооче-
редном просмотре кадров и создает иллюзию движения. Вам, конечно, в своей ра-
боте не придется рисовать с помощью C++Builder мультфильмы. Для этого имеют-
ся совершенно другие инструменты. Но некоторые простенькие анимации —
оживление изображений, иногда желательно делать. Например, при создании ка-
кой-нибудь обучающей программы может захотеться оживить какие-то схемы или
условные изображения механизмов, чтобы показать в движении взаимодействие
их отдельных составляющих. Или применить анимации типа тех, которые исполь-
зуются в программе Windows Проводник при копировании и удалении файлов.

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

Откройте новое приложение. Перенесите на форму компоненты Image, кнопку
Button и таймер Timer. Кнопку разместите внизу формы. Основную площадь фор-
мы должен занимать компонент Image, на котором и будет рисоваться изображе-
ние (рис. 5.15).