Шаг 4.
Вкладка System. Компонент TMediaPlayer

    На этом шаге мы рассмотрим компонент TMediaPlayer.

    Компонент TMediaPlayer - универсальный проигрыватель аудио- и видео-информации. Компонент TMediaPlayer инкапсулирует интерфейс управления носителями (Media Control Interface - MCI) Windows 95/98 и Windows NT.

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

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


Рис.1. Панель компонента TMediaPlayer

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

Таблица 1. Назначение кнопок компонента TMediaPlayer
Имя Описание


btPlay

Инициирует воспроизведение носителя информации.


btPause

Прерывает процесс записи или воспроизведения информации. Повторный щелчок на этой кнопке возобновляет прерванный процесс.


btStop

Останавливает запись или воспроизведение.


btNext

Позиционирует устройство на следующую дорожку или в конец носителя информации, если устройство не имеет дорожек.


btPrev

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


btStep

Позиционирует устройство на один блок кадров ближе к концу носителя информации. Количество кадров в блоке содержится в свойстве Frames компонента.


btBack

Позиционирует устройство на один блок кадров ближе к началу носителя информации.


btRecord

Начинает запись в носитель информации.


btEject

Освобождает устройство от носителя информации.

    Основные свойства компонента TMediaPlayer:

Таблица 2. Свойства компонента TMediaPlayer
Свойство Описание
Property AutoEnable: Boolean; Разрешает / Запрещает автоматическое определение доступных и недоступных кнопок.
Property AutoOpen: Boolean; Разрешает / Запрещает автоматический старт записи / воспроизведения в момент создания формы, в которую вставлен компонент.
Property AutoRewind: Boolean; Разрешает / Запрещает автоматическую "перемотку" носителя информации в момент начала записи или воспроизведения. Игнорируется, если устройство имеет дорожки или если установлены значения в свойства StartPos и EndPos.
TMPDevCaps = (mpCanStep, mpCanEject, mpCanPlay, mpCanRecord, mpUsesWindows); TMPDevCapsSet = set of TMPDevCaps;
Property Capabilities: TMPDevCapsSet;
Содержит параметры устройства, связанного с компонентом:
  • mpCanStep - может смещать носитель на кадр вперед или назад (устройства мультимедиа, как Animation, AVI Video, Digital Video, Overlay и VCR);
  • mpCanEject - может автоматически удалять носитель из устройства;
  • mpCanPlay - может воспроизводить информацию;
  • mpCanRecord - может записывать информацию;
  • mpUsesWindows - может использовать окно для отображения процесса.
TMPBtnType = (btPlay, btPause, btStop, btNext, btPrev, btStep, btBack, btRecord, btEject); TButtonSet = set of TMPBtnType;
Property ColoredButtons: TButtonSet;
Кнопки, использованные в этом свойстве, будут использовать цвета, заданные по умолчанию (не перечисленные кнопки будут черно-белыми). По умолчанию множество ColoredButtons содержит все кнопки .
Property DeviceID: Word; Содержит Windows-идентификатор устройства, связанного с компонентом. Доступно только для чтения.
TMPDeviceTypes = (dtAutoSelect, dtAVIVideo, dtCDAudio, dtDAT, dtDigitalVideo, dtMMMovie, dtOther, dtOverlay, dtScanner, dtSequencer, dtVCR, dtVideoDisc, dtWaveAudio);
Property DeviceType: TMPDeviceTypes;
Содержит тип устройства. Если DeviceType = dtAutoSelect, тип определяется автоматически по расширению файла в свойстве FileName. В момент установки любого мультимедийного устройства в файл SYSTEM.INI заносятся расширения файлов, которые поддерживаются этим устройством.
Property Display: TWinControl; Содержит ссылку на окно для устройств, которые могут его использовать в процессе записи / воспроизведения.
Property DisplayRect: TRect; Содержит область окна, указанного в свойстве Display, которое устройство может использовать для отображения процесса записи / воспроизведения. Для улучшения процесса отображения рекомендуется в свойстве DisplayRect указывать размеры, заданные по умолчанию (координаты 0,0 для правого нижнего угла).
Property EnabledButtons: TButtonSet; Содержит множество доступных кнопок (тип TButtonSet описан выше для свойства ColoredButtons).
Property EndPos: LongInt; Содержит положение носителя информации в момент прекращения записи или воспроизведения. Переустановка значения приводит к повторению записи или воспроизведения.
Property Error: LongInt; Содержит код ошибки. Доступно только для чтения.
Property ErrorMessage: String; Содержит сообщение об ошибке. Доступно только для чтения.
Property FileName: String; Содержит имя читаемого и записываемого файла.
Property Frames: LongInt; Определяет количество кадров, пропускаемых при выполнении методов Step или Back.
Property Length: LongInt; Содержит текущую длину носителя информации. Доступно только для чтения.
TMPModes = (mpOpen, mpPaused, mpSeeking, mpRecording, mpPlaying, mpStopped, mpNotReady);
Property Mode: TMPModes;
Показывает текущее состояние мультимедийного устройства:
  • mpNotReady - не готово;
  • mpStopped - остановлено;
  • mpPlaying - воспроизводит информацию;
  • mpRecording - записывает информацию;
  • mpSeeking - перемещает носитель информации;
  • mpPaused - приостановлено;
  • mpOpen - открыто.
Доступно только для чтения.
Property Notify: Boolean; Содержит значение True, если методы Back, Close, Eject, Next, Open, Pause, PauseOnly, Play, Previous, StartRecording, Resume, Rewind, Step и Stop будут генерировать событие OnNotify.
TMPNotifyValue = (nvSuccessful, nvSuperseded, nvAborted, nvFailure);
Property NotifyValue: TMPNotifyValue;
Содержит результат последней команды, генерирующей событие OnNotify:
  • nvSuccessful - выполнена успешно;
  • nvSuperseded - замена другой командой;
  • nvAborted - досрочно прервана;
  • nvFailure - завершилась ошибкой.
Доступно только для чтения.
Property Position: LongInt; Содержит текущую позицию носителя информации.
Property Shareable: Boolean; Разрешает / Запрещает другим компонентам и программам использовать устройство, связанное с данным компонентом.
Property Start: LongInt; Содержит позицию от начала носителя, с которой начинается запись или воспроизведение. Определяется в момент открытия устройства и доступно только для чтения.
Property StartPos: LongInt; Содержит текущую позицию от начала носителя, с которой начинается запись или воспроизведение.
TMPTimeFormats = (tfMilliseconds, tfHMS, tfMSF, tfFrames, tfSMPTE24, tfSMPTE25, tfSMPTE30, tfSMPTE30Drop, tfBytes, tfSamples, tfTMSF)
Property TimeFormat: TMPTimeFormats;
Определяет формат представления данных в свойствах StartPos, Position, Star, Length и EndPos (см. пояснения ниже).
Property TrackLength [TrackNum: Integer]: LongInt; Возвращает длину (в формате TimeFormat) дорожки с индексом TrackNum. Доступно только для чтения.
Property TrackPosition [TrackNum: Integer]: LongInt; Возвращает стартовую позицию (в формате TimeFormat) дорожки с индексом TrackNum. Доступно только для чтения.
Property Tracks: LongInt; Содержит количество дорожек в открытом устройстве. Доступно только для чтения.
Property VisibleButtons: TButtonSet; Содержит множество видимых кнопок (тип TButtonSet описан выше для свойства ColoredButtons).
Property Wait: Boolean; Если содержит значение True, управление возвращается в программу только после завершения перехода устройства в другое состояние, связанное с методом Back, Close, Eject, Next, Open, Pause, PauseOnly, Play, Previous, StartRecording, Resume, Rewind, Step или Stop.

    Если свойство AutoEnable имеет значение True, компонент автоматически по типу устройства или расширению файла и значению свойства Mode определяет, какие кнопки будут доступны пользователю. Если свойство AutoEnable имеет значение False, доступными будут только те кнопки, которые входят во множество EnabledButtons. Множество EnabledButtons игнорируется, если свойство AutoEnable имеет значение True.

    Свойство AutoRewind игнорируется, если устройство имеет дорожки или если процесс записи / воспроизведения вызван изменением значения в свойстве StartPos или EndPos.

    Положение носителя в свойствах StartPos, Length, Position, Start и EndPos в зависимости от значения свойства TimeFormat должно интерпретироваться следующим образом (отсчет ведется от начала носителя информации):

    Свойство TimeFormat в окне инспектора объектов недоступно и устанавливается автоматически при открытии мультимедийного устройства методом Open. В связи с этим значения в свойства StartPos, Position и EndPos могут устанавливаться, а в свойствах Length, Start, TrackLength и TrackPosition становятся действительными только после вызова метода Open.

    Методы компонента TMediaPlayer:

Таблица 3. Методы компонента TMediaPlayer
Метод Описание
Procedure AutoButtonSet (Btn TMPBtnType); dynamic; Реализует доступность / недоступность кнопок компонента при установке в свойство AutoEnable значения True.
Procedure Back; Перемещает текущую позицию в носителе информации назад на количество кадров, содержащихся в свойстве Frames.
Procedure Click (Button: TMPBtnType; var DoDefault: Boolean); dynamic; По умолчанию вызывает обработчик события OnClick. Метод должен перекрываться в потомках.
Procedure Close; Закрывает связанное с компонентом устройство.
Procedure DoNotify; dynamic; По умолчанию вызывает обработчик события OnNotify. Метод должен перекрываться в потомках.
Procedure Eject; Выгружает носитель информации из устройства.
Procedure MMNotify (var Message: TMessage); message MM_MCINOTIFY; Реализует отклик на сообщение Windows MM_MCINOTIFY. По умолчанию вызывает метод DoNotify.
Procedure Next; Перемещает текущую позицию носителя на начало следующей дорожки, а если устройство не имеет дорожек - в конец носителя.
Procedure Notification (AComponent: TComponent; Operation: TOperation); override; Извещает компонент AComponent о том, что завершилась операция Operation.
Procedure Open; Открывает мультимедийное устройство.
Procedure Pause; Приостанавливает процесс воспроизведения или записи информации. Если устройство уже было приостановлено, восстанавливает процесс, вызывая метод Resume.
Procedure PauseOnly; Приостанавливает процесс воспроизведения или записи информации. Если устройство уже было приостановлено, ничего не делает.
Procedure Play; Начинает воспроизведение с позиции StartPos, а если это свойство не установлено - с текущей позиции Position.
Procedure PostClick (Button: TMPBtnType); dynamic; Реализует отклик на событие OnPostClick. По умолчанию вызывает соответствующий обработчик события.
Procedure Previous; Перемещает текущую позицию носителя на начало предыдущей дорожки, а если устройство не имеет дорожек - в начало носителя.
Procedure Resume; Восстанавливает процесс записи или воспроизведения. Вызывается при повторном щелчке на кнопке btPause.
Procedure Rewind; Перемещает текущую позицию носителя к положению, определяемому свойством Start.
Procedure Save; Сохраняет информацию в файле с именем FileName.
Procedure StartRecording; Начинает запись информации с текущей позиции или позиции StartPos.
Procedure Step; Перемещает текущую позицию в носителе информации вперед на количество кадров, содержащихся в свойстве Frames.
Procedure Stop; Прекращает запись или воспроизведение информации.

    События компонента TMediaPlayer:

Таблица 4. События компонента TMediaPlayer
Событие Описание
EMPNotify = Procedure (Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean) of object;
Property OnClick: EMPNotify;
Возникает после щелчка на кнопке Button компонента. Если DoDefault = True, вызывается метод связанный с этой кнопкой.
Property OnNotify: TNotifyEvent; Возникает после завершения вызова одного из методов Back, Close, Eject, Next, Open, Pause, PauseOnly, Play, Previous, StartRecording, Resume, Rewind, Step или Stop, если свойство Notify имеет значение True.
EMPPostNotify = Procedure (Sender: TObject; Button: TMPBtnType) of object;
Property OnPostClick: EMPPostNotify;
Если Wait = True, событие OnPostClick возникает только после завершения соответствующей операции, вызванной событием OnClick, в противном случае - немедленно после события OnClick.

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

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

    Объявление функции:

function PlaySound(pszSound: PChar; hmod: HINST; fdwSound: Cardinal): 
                           Boolean; stdcall; external 'winmm.dll';
Параметры функции перечислены ниже:

    Приведем пример использования компонента TMediaPlayer - воспроизведем с его помощью видеоклип (рис.2). Заметим, что если проигрыватель должен воспроизводить видеоинформацию, ему надо указать область формы, в которой будет демонстрироваться видеоизображения. Обычно для этого используется компонент TPanel. Напомним, что соответствующий объект задается в свойстве Display.


Рис.2. Воспроизведение видеоклипа с помощью TMediaPlayer:
1)Windows-окно приложения при проектировании;
2)Windows-окно приложения при запуске.

    В поставку Delphi входит демонстрационная программа CoolStuf, содержащая два видеоклипа. Эта программа хранится в подкаталоге Demos | Coolstuf, где установлена система Delphi. Воспроизведем с помощью TMediaPlayer один из этих видеоклипов. Для этого необходимо указать клип для свойства FileName, после чего поместить на форму панель и указать ее в свойстве Display. Для свойства AutoOpen нужно установить значение True, затем откомпилировать и запустить ее на выполнение. При щелчке на кнопке проигрывателя Play в области панели будет воспроизведен небольшой клип.

    Текст этого примера можно взять здесь.

    На следующем шаге мы рассмотрим компонент TOLEContainer.




Предыдущий шаг Содержание Следующий шаг