Excel. Трюки и эффекты
Шрифт:
• tfMSF – количество минут, секунд и кадров, размещенных побайтно, начиная с младшего байта, в четырехбайтовом целом. Старший байт не учитывается.
• tfFrames – целое четырехбайтовое число, содержащее количество кадров.
Теперь, когда мы ознакомились с основными свойствами мультимедиа-компонента MediaPlayer, можем приступать к непосредственному применению его на практике. Приведем пример исходного текста программы, при загрузке которой проигрывается звук (в формате WAV) (листинг 5.3).
Листинг 5.3.
Воспроизведение
//Функция вызывается при создании формы
procedure TForm1.FormCreate(Sender: TObject);
begin
//Скрываем компонент
MyMediaPlayer.Visible := false;
//Автоматически определяем устройство воспроизведения
MyMediaPlayer.DeviceType := dtAutoSelect;
//Загружаем файл воспроизведения
MyMediaPlayer.FileName := \'start.wav\
//Открываем устройство
if not MyMediaPlayer.AutoOpen then MyMediaPlayer.Open;
//Воспроизводим файл
MyMediaPlayer.Play;
end;
При создании формы Forml воспроизводится звуковой файл start. wav.
В некоторых случаях удобно хранить данные (например, звуковые записи) и использовать их прямо в запускаемом модуле (ЕХЕ-файле). Такой метод предусматривает хранение звука в файлах ресурсов (RES). На этапе сборки программы файлы ресурсов прикрепляются к запускаемому модулю, тем самым увеличивая размер модуля. Но количество файлов, необходимых для корректной работы программы, уменьшается. Так, в предыдущем случае для нормальной работы программы (воспроизведение звука при загрузке) необходим фaйлstart. wav. Следующий пример демонстрирует создание приложения, запускаемый модуль которого будет содержать все необходимые ресурсы, в нашем случае это звуковой файл.
Вначале необходимо создать файл ресурса, содержащий звуковую запись. Для этого понадобится компилятор ресурсов, который находится в кaтaлoгeBorland\ Delphi7\Bin\ и носит имяЬгсс32. ехе. Далее создаем файл ресурса. Все ресурсы (значки, указатели, изображения, таблицы строк и т. п.), используемые приложением, описываются в специальном файле. Такое описание имеет фиксированный формат:
<имя> <тип> <параметры> <имя файла>
Имя – это уникальное имя ресурса, которое будет использоваться в процедурах работы с ресурсами. Имя файла – строка, содержащая путь к файлу. В нашем случае строка, описывающая ресурс:
LOADSOUND RCDATA LOADONCALL start.wav
Далее в командной строке записываемЬгсс32. ехе source. re, где source. re – текстовый файл, содержащий описание ресурса.
После компиляции получаем готовый файл pecypcasource. RES. Перемещаем его в каталог проекта. На этом этапе ресурс может использоваться.
Чтобы подключить файл ресурса, пишем в исходном тексте:
//Подключение ресурса
{$R SOURCE.RES}
Теперь, когда файл ресурса подключен и готов к использованию, необходимо создать функцию, которая будет доставать звуковой файл и воспроизводить его. Тело функции, выполняющей эти действия, выглядит следующим образом (листинг 5.4).
Листинг 5.4.
Использование
//Функция, которая воспроизводит звук, находящийся в ресурсе
procedure RetrieveLoadSound;
var
hResource : THandle;
pData : Pointer;
begin
//Загружаем файл ресурса и находим звук под именем \'LOADSOUND\'
hResource := LoadResource( hInstance, FindResource(hInstance,
\'LOADSOUND\', RT_RCDATA));
try
//Находим адрес загруженного ресурса
pData := LockResource(hResource);
if pData = nil then raise Exception.Create(\'Ошибка чтения
ресурса LOADSOUND\');
//Воспроизводим звуковой файл
sndPlaySound(pData, SND_MEMORY);
finally
//Освобождаем ресурс
FreeResource(hResource);
end;
end;
Для работы функции RetrieveLoadSound понадобятся две следующие переменные: hResource (дескриптор ресурса) и pData (указатель на память, расположение ресурса). Перед использованием ресурса производится его загрузка (функция LoadResource). Но чтобы загрузить именно тот ресурс, который нам необходим (звук LOADSOUND), с помощью функции FindResource ищем его в ресурсах, подключенных к этому экземпляру приложения (hlnstance). Далее получаем указатель на память, в которой находится звуковой файл, и записываем его в переменную pData. Если ресурс не найден, то программа выдаст сообщение об ошибке.
После того как был получен указатель на память, его можно использовать в функции sndPlaySound для воспроизведения звука. Параметр SND_MEMORY говорит о том, что воспроизведение будет осуществляться из памяти.
Функция RetrieveLoadSound может использоваться в любом месте программы для воспроизведения start. wav. В этом случае данные звукового файла будут находиться в запускаемом модуле, увеличивая его объем, но сокращая количество файлов приложения. Такой подход эффективен при создании небольших приложений, которые снабжаются короткими звуковыми сопровождениями.
В конце главы будет подробно описан процесс создания универсального проигрывателя, работа которого целиком построена на использовании компонента MediaPlayer. Далее рассмотрим следующий мультимедийный компонент Delphi – Animate, который позволяет воспроизводить как стандартную (встроенную в Windows), так и пользовательскую анимацию.
5.3. Компонент Animate
Видеоклип представляет собой файл в формате AVI, содержащий последовательность отдельных кадров, при отображении которых создается эффект движения. Наряду с изображением AVI-файлы могут содержать звук. Для воспроизведения видеоклипов можно использовать любой из компонентов – Animate или MediaPLayer.
Компонент Animate позволяет проигрывать AVI-файлы, а также отображать стандартную анимацию, используемую в Windows. AVI-файлы, воспроизводимые компонентом Animate, имеют следующие ограничения:
• они не должны содержать звука;
• информация в них не должна быть сжатой;
• размер файла не должен превышать 64 Кбайт.
Для задания воспроизводимого видеоклипа используются свойства FileName и CommonAVI. В один момент можно использовать только одно из этих свойств. Проигрываемый AVI-файл, существующий на диске, указывается путем задания свойства FileName, при этом свойству CommonAVI автоматически присваивается значение aviNone. Свойство CommonAVI позволяет выбрать один из стандартных клипов Windows и принимает следующие значения: