Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
14.3 Mб
Скачать

1.1.3. Универсальный проигрыватель MediaPlayer

В Delphi (начиная с Delphi 2) имеется компонент MediaPlayer — универсальный проигрыватель аудио- и видеоинформации. Этот медиаплеер расположен на странице System библиотеки компонентов. Он инкапсулирует интерфейс управления носителями (Media Control Interface — MCI) Windows 95/98 и Windows NT.

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

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

Таблица 72.

Назначение кнопок

Кнопка

Действие

Play

Воспроизведение

Pause

Пауза воспроизведения или записи. Если медиаплеер в момент щелчка уже в состоянии паузы, то воспроизведение или запись возобновляются

Stop

Остановка воспроизведения или записи

Next

Переход на следующий трек или на конец

Prev

Переход на предыдущий трек или на начало

Step

Перемещение вперед на заданное число кадров

Back

Перемещение назад на заданное число кадров

Record

Начало записи

Eject

Освобождение объекта, загруженного в устройство

Каждой кнопке медиаплеера соответствует метод, осуществляющий по умолчанию требуемую операцию: Play, Pause, Stop, Next, Previous, Step, Back, StartRecording, Eject.

Тип устройства мультимедиа, с которым работает медиаплеер, определяется его свойством DeviceType. Если устройство мультимедиа хранит объект воспроизведения в файле, то имя файла задается свойством FileName. По умолчанию свойство DeviceType имеет значение dtAutoSelect. Это означает, что медиаплеер пытается определить тип устройства, исходя из расширения имени файла FileName.

Еще одно свойство MediaPlayerAutoOpen. Если оно установлено в true, то медиаплеер пытается открыть устройство, указанное свойством DeviceType, автоматически во время своего создания в процессе выполнения приложения.

Воспроизведение видео информации по умолчанию производится в окно, которое создает само открытое устройство мультимедиа. Однако это можно изменить, если в свойстве Display указать оконный элемент, в котором должно отображаться изображение. Это может быть, например, форма или панель. Можно также задать в свойстве DisplayRect типа TRect (свойство только времени выполнения) прямоугольную область этого окна, в которую должно выводиться изображение. Для задания свойства DisplayRect можно использовать функцию Rect. Однако, в данном свойстве использование этого типа не совсем обычно. Первые две координаты, как и обычно, задают положение левого верхнего угла изображения. А два следующих числа задают ширину и высоту изображения, а не координаты правого нижнего угла. Например, оператор

MediaPlayerl.DisplayRect:=Rect(10,10, 200, 200) ;

задает для вывода область с координатами левого верхнего угла (10, 10), длиной и шириной, равными 200.

В компоненте MediaPlayer определены события OnClick и OnNotify. Первое из них происходит при выборе пользователем одной из кнопок медиаплеера и определено как

type TMPBtnType=(btPlay,btPause,btStop,btNext,btPrev,btStep,btBack,

btRecord, btEject);

procedure(Sender:TObject; Button:TMPBtnType; var DoDefault: Boolean);

Параметр Button указывает выбранную кнопку. Параметр DoDefault, передаваемый как var, определяет выполнение (при значении true по умолчанию) или отказ от выполнения стандартного метода, соответствующего выбранной кнопке.

Событие OnNotify происходит после возвращения очередного метода, если свойство медиаплеера Notify было установлено в true. Способ возврата любого метода медиаплеера определяется свойством Wait. Если установить Wait равным false, то возвращение управления в приложение происходит сразу после вызова метода, не дожидаясь завершения его выполнения. Таким образом, задав Notify равным true и Wait равным false, можно обеспечить немедленный возврат в приложение и отображение пользователю текущего состояния объекта мультимедиа.

Свойства Notify и Wait действуют только на один очередной метод. Поэтому их значения надо каждый раз восстанавливать в обработчиках событий OnClick или OnNotify.

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

Вот, собственно, в конспективном виде основная информация о компоненте MediaPlayer.

Пример: Простое и в то же время мощное приложение можно сделать очень легко. Начните новый проект и перенесите на форму компоненты MediaPlayer, MainMenu, Label и OpenDialog. В фильтре компонента OpenDialog можно, например, задать:

аудио *.wav, *.mid *.wav;*.mid

видео *.avi *.avi

все файлы *.*

В меню достаточно задать одну команду: Файл | Открыть. Обработчик события OnClick этой команды может содержать оператор

if OpenDialogl.Execute then with MediaPlayerl do begin

Labell.Caption:='BJN: '+ OpenDialogl.FileName;

FileName:=OpenDialogl.FileName;

Open; end;

который открывает устройство мультимедиа, соответствующее выбранному пользователем файлу. При этом надо проследить, чтобы в компоненте MediaPlayer свойство DeviceType равнялось dtAutoSelect. Это обеспечит автоматический выбор соответствующего устройства мультимедиа исходя из расширения выбранного файла.

В компоненте MediaPlayer при желании можно указать имя файла FileName, открываемого в момент начала выполнения приложения. Тогда надо установить свойство AutoOpen в true. Впрочем, это, конечно, не обязательно.

Вот и все. Можете выполнять свое приложение и наслаждаться музыкой или фильмами, если, конечно, все вопросы, связанные с настройкой мультимедиа на вашем компьютере решены.

В приложении можно просмотр видео файлов осуществлять в окне, автоматически создаваемом компонентом MediaPlayer. Если хотите отображать окно в каком-то указанном вами оконном компоненте вашего приложения, то это можно сделать, например, следующим образом. Поместите на форму панель Panel, сотри­те текст в ее свойстве Caption и растяните панель до желаемых размеров. Затем в свойстве Display компонента MediaPlayer выберите из выпадающего списка имя файлов в автоматически создаваемом окне панели Panel1.

Рис. 66 Универсальный проигрыватель с просмотром видео.

Запустите приложение (см.рис 67) и можете просматривать кинофильмы в указанном вами окне.

Рис. 67. Универсальный проигрыватель с просмотром видео файлов в указанном окне

Чтобы все-таки использовать какие-то события компонента MediaPlayer, давайте немного усложним приложение. Добавим в него еще две метки (рис. 68), в которых будем отображать состояние открытого устройства мультимедиа и последнюю вызванную операцию.

Рис. 68. Приложение универсального проигрывателя с отображением состояния

Код, обеспечивающий подобную обратную связь в приложении, может быть следующим.

const ModeStr: array[TMPModes] of string =

('He готово', 'Остановлено', 'Воспроизведение', ‘Запись', 'Поиск’, 'Пауза', 'Открыто');

ButtonStr: array[TMPBtnType] of string = ('Воспроизведение', 'Пауза', 'Стоп', 'Следующий', 'Предыдущий', 'Вперед’, 'Назад', 'Запись', 'Конец');

procedure TForml.OpenClick(Sender: TObject);

begin

if OpenDialogl.Execute then with MediaPlayerl do

begin

FileName:=OpenDialogl.FileName; Labell.Caption;='Файл: '+FileName; Open;

Notify:=true; end; end;

procedure TForml.MediaPlayerlNotify(Sender: TObject);

begin

with MediaPlayerl do begin Label3.Caption :='Состояние: '+ModeStr[Mode];

{Переустановка Notify, чтобы событие произошло в следующий раз}

Notify := True; end; end;

procedure TForml.FormCreate(Sender: TObject);

begin

with MediaPlayerl do begin Labell.Caption:='Файл: '+FileName; Label2.Caption : = 'Состояние: '+ModeStr[Mode] ; Notify:=true; end;

end;

procedure TForml.MediaPlayerlClick(Sender: TObject;Button: TMPBtnType; var DoDefault: Boolean);

begin

Label3.Caption:='Операция: '+ButtonStr[Button];

{Переустановка Notify, чтобы произошло событие OnNotify}

MediaPlayerl.Notify := True; end;

Запустите приложение и проверьте его в работе.