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

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

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

вызова метода Open. Некоторые методы компонента TMediaPlayer перечислены в таблице 5.

Таблица 5 – Методы компонента TMediaPlayer

Метод

Описание

 

 

procedure Back;

Перемещает текущую позицию в носителе информации назад

 

на количество кадров, содержащихся в свойстве Frames

procedure Close;

Закрывает связанное с компонентом устройство

procedure Eject;

Выгружает носитель информации из устройства.

procedure Next;

Перемещает текущую позицию носителя на начало следующей

 

дорожки, а если устройство не имеет дорожек – в конец

 

носителя

procedure Open;

Открывает мультимедийное устройство

procedure Pause;

Приостанавливает процесс воспроизведения или записи

 

информации. Если устройство уже было приостановлено,

 

восстанавливает процесс с помощью вызова метода Resume

procedure PauseOnly;

Приостанавливает процесс воспроизведения или записи

 

информации. Если устройство уже было приостановлено,

 

ничего не делает

procedure Play;

Начинает воспроизведение с позиции StartPos а если это

 

свойство не установлено – с текущей позиции Position

procedure Previous;

Перемещает текущую позицию носителя на начало

 

предыдущей дорожки, а если устройством имеет дорожек – в

 

начало носителя.

procedure Resume;

Восстанавливает процесс записи или воспроизведения.

 

Вызывается при повторном щелчке кнопке btPause.

procedure Rewind;

Перемещает текущую позицию носителя к положению,

 

определяемому свойством Start.

procedure Save;

Сохраняет информацию в файле с именем FileName.

procedure

Начинает запись информации с текущей позиции или позиции

StartRecording;

StartPos.

procedure Step;

Перемещает текущую позицию в носителе информации вперед

 

на количество кадров, содержащихся в свойстве Frames.

procedure Stop;

Прекращает запись или воспроизведение информации.

События компонента TMediaPlayer представлены в таблице 6.

Таблица 6 – События компонента TMediaPlayer

Событие

Описание

 

 

EMPNotify = procedure(Sender: TObject;

Возникает после щелчка на кнопке Button

Button: TMPBtnType; var DoDefault:

компонента. Если DoDefault=True,

Boolean) of object;

вызывается метод, связанный с этой кнопкой

property OnClick: EMPNotify;

 

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

Событие

Описание

 

 

property OnNotify: PNotifyEvent;

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

 

из методов Back, Close, Eject, Next, Open,

 

Pause, PauseOnly, Play, Previous, Resume,

 

Rewind, StartRecording, Step или Stop, если

 

свойство Notify имеет значение True

EMPPostNotify = procedure (Sender:

Если Wait=True, событие OnPostClick

TObject; Button: TMPBtnType) of object;

возникает только после завершения

property OnPostClick: EMPPostNotify;

соответствующей операции, вызванной

 

событием OnClick, в противном случае –

 

немедленно после события OnClick

В качестве примера использования компонента TMediaPlayer рассмотрим программу мультимедиа проигрывателя.

На форму frmEasyPlayer поместите две панели (pnView, pnCommand). Установите значение свойства Align для компонента pnCommand равным alBottom, а для компонента pnView равным alClient.

Поместите на панель pnCommand компонент TMediaPlayer (mmPlayer). Установите значение свойства AutoSize компонента pnCommand равным True. Поместите на панель pnCommand компонент TBitBtn (btnOpen). Настройте вид компонента mmPlayer как показано на рисунке 12. Добавьте на форму компонент TOpenDialog (OpenDialog).

Рисунок 12 – Вид формы после добавления компонентов

Настройте свойство Filter компонента OpenDialog как показано на рисунке 13

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

Рисунок 13 – настройка свойства Filter компонента OpenDialog

Добавьте в секцию public формы метод SetTitle. Этот метод служит для установки заголовка формы в зависимости от имени открытого файла. Тело метода приведено ниже.

procedure TfrmEasyPlayer.SetTitle(ATitle: string); begin

if ATitle<>'' then Caption:='Проигрыватель - ' + ATitle else Caption:='Проигрыватель';

end;

Добавьте в форму обработчики событий OnClick для компонента btnOpen и OnCreate для формы.

procedure TfrmEasyPlayer.FormCreate(Sender: TObject); begin

SetTitle(''); end;{FormCreate}

procedure TfrmEasyPlayer.btnOpenClick(Sender: TObject); begin

if OpenDialog.Execute then begin

try mmPlayer.FileName:=OpenDialog.FileName; mmPlayer.Open;

SetTitle(ExtractFileName(OpenDialog.FileName)); except

on Err:EMCIDeviceError do ShowMessage(Err.Message); else

ShowMessage('Неизвестная ошибка'); end;{except}

end;{if} end;{btnOpenClick}

Для того чтобы видеоизображение выводилось не в окно медиапрогрывателя, а на компонент pnView укажите его в свойстве Display компонента mmPlayer. Чтобы обеспечить масштабирование выводимого видеоизображения необходимо при изменении размеров панели pnView изменять значение свойства mmPlayer.DisplayRect. Создайте обработчик события OnResize для компонента pnView.

procedure TfrmEasyPlayer.pnViewResize(Sender: TObject); begin

//изменяем размер области для вывода изображений mmPlayer.DisplayRect:=pnView.ClientRect;

end;{pnViewResize}

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

Запустите программу, проверьте ее работоспособность. Вид окна работающей программы приведен на рисунке 14.

Рисунок 14 – Окно программы «EasyPlayer».

Обратите внимание на то, что будут проигрываться только те мультимедиа файлы, для которых в операционной системе установлены драйверы. Поэтому вызовы методов Open и Play компонента TMediaPlayer необходимо обязательно помещать в защищенную секцию исключения.

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

...

mmPlayer.FileName:=’file1.mp3’; mmPlayer.Open;

mmPlayer.Play;

mmPlayer.FileName:=’file2.mp3’; mmPlayer.Open;

mmPlayer.Play;

...

Создайте новый проект. Поместите на форму (frmSndList) компонент TMediaPlayer (mmPlayer). Установите значение свойства Visible компонента mmPlayer равным False. Добавьте обработчики событий OnCreate, OnKeyDown и OnDestroy для формы. Создайте обработчик события OnNotify для компонента mmPlayer. Листинг программы приведен ниже.

Листинг 3

unit UPlayer;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, MPlayer;

type

TfrmSndList = class(TForm)

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

mmPlayer: TMediaPlayer;

procedure mmPlayerNotify(Sender: TObject); procedure FormCreate(Sender: TObject);

procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

procedure FormDestroy(Sender: TObject); private

{Private declarations } public

{Public declarations }

//список для хранения списка mp3 файлов

SndList:TStringList;

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

CurFile:Integer;

end;

var frmSndList: TfrmSndList;

implementation

{$R *.dfm}

procedure TfrmSndList.mmPlayerNotify(Sender: TObject); begin

//если проигрыватель остановлен, //то запускаем следующий файл из списка if mmPlayer.Mode=mpStopped then

begin Inc(CurFile);//следующий файл

if CurFile<=SndList.Count-1 then begin

mmPlayer.FileName:=SndList.Strings[CurFile];

mmPlayer.Open;

mmPlayer.Play;

//устанавливаем заголовок формы

Caption:=SndList.Strings[CurFile]; end

else //список исчерпан закрываем программу

Halt(0); end;{if}

end;{mmPlayerNotify}

procedure TfrmSndList.FormCreate(Sender: TObject); var Search:TSearchRec;

begin

//создаем список

SndList:=TStringList.Create;

//ищем все файлы mp3 в текущем каталоге if FindFirst('*.mp3', 0, Search)=0 then

begin repeat

SndList.Add(Search.Name); until FindNext(Search)<>0;

CurFile:=0;//индекс первого файла для проигрывания end{if}

else CurFile:=-1; //нет файлов в списке FindClose(Search);