Материал: Лабораторная работа №22 Таймер, анимация, звук и видео

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

InvalidateRect(Handle, nil, False); end;{TimerTimer}

procedure TfrmAirPlane.CalcNewCoord(var newX, newY: Integer); var dx, dy:Integer;

begin randomize; dx:=random(20); randomize; dy:=random(20);

if dx>10 then dx:=10-dx; if dy>10 then dy:=10-dy;

if newX+dx+Mask.Width<Width then newX:=newX+dx else newX:=Width-Mask.Width;

if newY+dy+Mask.Height<ClientHeight then newY:=newY+dy else newY:=ClientHeight-Mask.Height;

if newX<0 then newX:=0; if newY<0 then newY:=0;

end;{CalcNewCoord}

procedure TfrmAirPlane.FormDestroy(Sender: TObject); begin

//уничтожение созданных растров

Background.Free;

Mask.Free;

Sprite.Free; end;{FormDestroy} end.{UPlane}

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

Использование компонента TImageList

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

Этот компонент не имеет собственного холста, но может вывести изображение на любой предоставленный ему холст. Основной метод компонента для вывода изображений Draw имеет следующий синтаксис

procedure Draw(Canvas: TCanvas; X, Y, Index: Integer; Enabled: Boolean=True);

гдеCanvas – холст, на который выводится изображение; x, y – координаты для вывода изображения;

Enabled – если равно False, то выводится в серых полутонах (вид запрещенной кнопки)/

Значение свойства ImageType отвечает за то, как будет интерпретироваться изображение, как маска спрайта (itMask) или как изображение (itImage).

Обратите внимание, что для изображений помещенных в компонент TImageList не нужно сначала выводить маску спрайта, а затем сам спрайт. Достаточно указать «прозрачный» цвет при загрузке изображения в список (для bmp файлов, для ico файлов этого делать не нужно, т.к. информация о прозрачных областях хранится в самом файле) (рисунок 7).

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Рисунок 7 – Выбор «прозрачного» цвета для изображения.

Воспроизведение звуковых и видеофайлов

Функция MessageBeep

Иногда требуется воспроизвести короткий звуковой сигнал для привлечения внимания пользователя программы – например, после завершения длительного по времени процесса обновления данных. Стандартная для Delphi процедура без параметров Beep извлекает сигнал из системного динамика только в том случае, если компьютер не оснащен звуковой картой. С другой стороны, мощные возможности компонента TMediaPlayer кажутся излишними для решения этой задачи на компьютерах, оснащенных звуковой картой. В этом случае может пригодиться API-функция MessageBeep, с помощью которой в 32разрядных версиях Windows озвучиваются стандартные диалоговые окна.

function MessageBeep(idSound: word): Boolean;

Единственным параметром обращения к этой функции является один из идентификаторов стандартного звука приведенных в таблице 1.

Таблица 1 – Идентификаторы для стандартных звуков

Значение

Описание

 

 

-1

Игнорирует звуковую карту и извлекает короткий звуковой сигнал

 

из системного динамика

mb_IconAsterisk

Произошла ошибка

mb_IconExclamation Произошла ошибка

mb_IconHand

Запрос на выбор параметра

mb_IconQuestion

Запрос подтверждения

mb_Ok

Успешное завершение операции

Сразу после обращения функция возвращает управление программе и воспроизводит звук асинхронно.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Функция PlaySound

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

Объявление функции имеет следующий вид:

function PlaySound(pszSound: PChar; hmod: HINST; fdwSound:Cardinal): Boolean;

гдеpszSound – имя воспроизводимого файла;

hmod – дескриптор программы, если звук берется из ресурсного файла противном случае содержит 0);

fdwSound – параметр, уточняющий воспроизведение.

Параметр fdwSound может принимать значения или их комбинацию приведенные в таблице 2.

Таблица 2 – Некоторые возможные значения параметра fdwSound.

Значение

Описание

 

 

SND_ASYNC

Звук воспроизводится асинхронно (функция возвращает управление

 

сразу после обращения к ней)

SND_LOOP

Звук воспроизводится постоянно до тех пор, пока не вызвана та же

 

функция с параметром pszSound, равным ‘’

SND_NOSTOP

Функция пытается воспроизвести звук, если устройство не занято; в

 

противном случае не воспроизводит ничего (если устройство

 

занято, но этот параметр не указан, функция прервет

 

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

 

следующего)

SND_NOWAIT

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

 

звук

SND_PURGE

Прекращает воспроизведение всех звуков для данной задачи

SND_SYNC

Воспроизводит звук синхронно и возвращает управление только

 

после окончания его воспроизведения

SND_NODEFAULT

Отменить проигрывание звука по умолчанию. Если указанный

 

звуковой файл не найден, PlaySound завершает работу без

 

проигрывания звука по умолчанию.

SND_MEMORY

Звуковой файл загружен в ОЗУ. Параметр fdwSound должен

 

содержать указатель на звуковые данные.

SND_APPLICATION Звук проигрывается с использованием приложения ассоциированного с этим файлом

SND_ALIAS

Параметр fdwSound содержит идентификатор системного события

 

описанного в реестре или в файле Win.ini. Нельзя использовать

 

совместно с SND_FILENAME или SND_RESOURCE

SND_RESOURCE

Параметр fdwSound содержит идентификатор ресурса, параметр

 

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

 

ресурса.

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Параметр fdwSound может содержать несколько опций одновременно (для объединения используется логическая операция or). В случае успешного выполнения результат возвращаемый функцией равен True, иначе False.

Рассмотрим несколько простых примеров использования функции PlaySound. Озвучим программу, приведенную в листинге 1.

Добавьте в список модулей модуль mmSystem. Измените, обработчик OnCreate формы как показано ниже

procedure TfrmAirPlane.FormCreate(Sender: TObject); begin

//двойная буферизация

DoubleBuffered:=True; //загрузка изображений

LoadImages; //расчет координат

CalcNewCoord(x, y); //включаем звук

PlaySound('ir_inter.wav', 0, SND_LOOP or SND_ASYNC); end;{FormCreate}

Параметр fdwSound содержит флаг SND_LOOP поэтому звук будет повторяться бесконечно. Кроме того установка флага SND_ASYNC приводит к асинхронному выполнению функции PlaySound, т.е. звук будет воспроизводится в фоновом режиме (параллельно с основной программой).

Измените обработчик события OnDestroy формы как показано ниже.

procedure TfrmAirPlane.FormDestroy(Sender: TObject); begin

//уничтожение созданных растров

Background.Free;

Mask.Free;

Sprite.Free;

//проигрываем стандартный звук при выходе из системы

PlaySound('SystemExit', 0, SND_SYNC); end;{FormDestroy}

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

При воспроизведении стандартных звуков необходимо чтобы была настроена звуковая схема. Сделать это можно в панели управления с помощью раздела «Звук и мультимедиа» (рисунок 8).

Лабораторные работы по информатике для специальности «Моделирование и исследование операций в организационно-технических системах»

Рисунок 8 – Панель управления

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