Russian Belarusian English German Japanese Ukrainian

Мультимедиа

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

Animate - воспроизведение немых видео клипов

Рассмотрим способ воспроизведения в приложении C++Builder стандартных мультипликаций Windows и файлов .avi клипов без звукового сопровождения. Это позволяет сделать компонент Animate, расположенный на странице Win32 библиотеки.
 
Компонент Animate позволяет воспроизводить на форме стандартные видео клипы Windows (типа копирования файлов, поиска файлов и т.п.) и немые видео файлы .avi (Audio Video Interleaved). Эти файлы представляют собой последовательность кадров битовых матриц. Они могут содержать и звуковую дорожку, но компонент Animate воспроизводит только немые клипы AVI. Он работает только с не уплотненными файлами AVI или с клипами AVI, уплотненными с использованием RLE - run-length encoding.
 
TAnimate может воспроизводить клипы AVI из ресурсов, из файлов или из библиотеки Shell32.dll, если приложение работает с Windows 95 или NT.
 
Воспроизводимое им изображение задается одним из двух свойств: FileName или CommonAVI. Первое из этих свойств позволяет в процессе проектирования или программно задать имя воспроизводимого файла. А свойство CommonAVI позволяет воспроизводить стандартные мультипликации Windows.
Тип TCommonAVI определяет множество предопределенных в Windows мультипликаций типа копирования файлов, поиска файлов, удаления файлов и т.п.
 
Установите значение CommonAVI, например, равным aviCopyFile. Это соответствует стандартному изображению копирования файла. Соответствующий начальный рисунок немедленно появится на вашей форме. Свойство Repetitions компонента Animate задает число повторений воспроизведения клипа. Если оно равно 0 (значение по умолчанию), то воспроизведение повторяется вновь и вновь до тех пор, пока не будет выполнен метод Stop. При выполнении этого метода генерируется событие OnStop, которое можно использовать, например, чтобы стереть изображение - сделать его невидимым.
 
Если же свойство Repetitions задать большим нуля, оно определит число повторений клипа. Задайте его, например, равным 3. А теперь установите свойство Active компонента Animate в true. Вы увидите, что еще в процессе проектирования ваше приложение заработает. Изображение оживет и клип будет повторен 3 раза.
 
Вы можете посмотреть воспроизводимое изображение по кадрам. Для этого щелкните на компоненте правой кнопкой мыши и из всплывшего меню выберите разделы Next Frame (следующий кадр) или Previous Frame (предыдущий кадр). Это позволит вам выбрать фрагмент клипа, если вы не хотите воспроизводить клип полностью. Воспроизвести фрагмент клипа можно, установив соответствующие значения свойство StartFrame - начальный кадр воспроизведения, и StopFrame - последний кадр воспроизведения.
Воспроизводить фрагмент клипа можно и методом Play, который определен следующим образом:
void __fastcall Play(Word FromFrame, Word ToFrame, int Count);
Метод воспроизводит заданную последовательность кадров клипа от FromFrame до ToFrame включительно и воспроизведение повторяется Count раз. Если FromFrame = 1, то воспроизведение начинается с первого кадра. Значение ToFrame должно быть не меньше FromFrame и не больше значения, определяемого свойством FrameCount (свойство только для чтения), указывающим полное число кадров в клипе. Если Count = 0, то воспроизведение повторяется до тех пор, пока не будет выполнен метод Stop.
 
Выполнение Play идентично заданию StartFrame равным FromFrame, StopFrame равным ToFrame, Repetitions равным Count и последующей установке Active в true.
В компоненте Animate предусмотрены события OnClose, OnOpen, OnStart и OnStop, генерируемые соответственно в моменты закрытия и открытия компонента, начала и окончания воспроизведения.
 
Давайте теперь построим тестовое приложение, показывающее возможности компонента Animate. Установите в приложении свойство Visible компонента Animate в false. Это надо для того, чтобы изображение возникало только тогда, когда произойдет соответствующее событие: копирование файлов, поиск файлов и т.п. В тестовом приложении мы будем имитировать начало и окончание события, которое должно сопровождаться мультипликацией, нажатиями кнопок запуска и останова воспроизведения. Поэтому поставьте значение свойства Repetitions в 0, чтобы воспроизведение длилось до окончания события. Свойство Active установите в false. Полезно также установить свойство AutoSize в false, а свойство Center в true, чтобы изображение всегда появлялось в центре экрана.
 
А теперь добавьте в приложение 3 кнопки. Первая из них (назовите ее BWind) будет начинать процесс воспроизведения поочередно всех стандартных клипов Windows. Вторая кнопка (назовите ее BStop) пусть завершает воспроизведение очередного клипа. А третью кнопку (назовите ее BFile) введем для того, чтобы показать, что компонент может воспроизводить изображения из заданного файла .avi. Чтобы пользователь мог выбрать файл изображения, добавьте на форму компонент OpenDialog и задайте его фильтр (свойство Filter) равным «видео *.avi|*.avi».
 
Теперь все приготовления закончены и осталось только написать обработчики событий. Код обработчиков может иметь вид:
int i;
void __fastcall TForm1::BWindClick(TObject *Sender)
{
Animate1->Visible = true;
i = 1;
Animate1->CommonAVI = aviFindFolder;
Animate1->Active = true;
}
void __fastcall TForm1::BStopClick(TObject *Sender)
{
Animate1->Stop();
}
void __fastcall TForm1::Animate1Stop(TObject *Sender)
{
i++;
switch (i)
{
case 2: Animate1->CommonAVI = aviFindFile; break;
case 3: Animate1->CommonAVI = aviFindComputer; break;
case 4: Animate1->CommonAVI = aviCopyFiles; break;
case 5: Animate1->CommonAVI = aviCopyFile; break;
case 6: Animate1->CommonAVI = aviRecycleFile; break;
case 7: Animate1->CommonAVI = aviEmptyRecycle; break;
case 8: Animate1->CommonAVI = aviDeleteFile; break;
}
if(i<9)
Animate1->Active = true;
else
Animate1->Visible = false;
}
void __fastcall TForm1::BFileClick(TObject *Sender)
{
if (OpenDialog1->Execute())
{
i = 9;
Animate1->FileName = OpenDialogl->FileName;
Animate1->Visible = true;
Animate1->Active = true;
}
}
Обработчик события OnClick кнопки BWind задает начальное значение свойства CommonAVI, сбрасывает счетчик на 1, делает компонент Animate1 видимым и активизирует его.
 
Обработчик события OnClick кнопки BStop останавливает воспроизведение методом Stop.
Обработчик события OnStop компонента Animate1 увеличивает счетчик на 1, в зависимости от значения счетчика загружает в компонент соответствующий клип Windows, и активизирует компонент. Если все клипы уже воспроизведены, то компонент делается невидимым.
Обработчик события OnClick кнопки BFile загружает в компонент видео файл, выбранный пользователем.
 
Выполните приложение и проверьте его в работе. В качестве видео файла можете использовать файл ...\Examples\Mfc\Generol\Cmnctrls\dillo.avi, поставляемый с примерами C++Builder или любой другой более интересный видеофайл.

Веер, MessageBeep и PlaySound - процедуры воспроизведения звуков

Наиболее простой процедурой, управляющей звуком, является процедура Веер. Она не имеет параметров и воспроизводит стандартный звуковой сигнал, установленный в Windows, если компьютер имеет звуковую карту и стандартный сигнал задан (он устанавливается в программе Windows «Панель управления» после щелчка на пиктограмме Звук). Если звуковой карты нет или стандартный сигнал не установлен, звук воспроизводится через динамик компьютера просто в виде короткого щелчка.
 
Откройте новое приложение, перенесите на него кнопку, в обработчике щелчка которой напишите одно слово:
Веер();
Можете запустить приложение, щелкнуть на кнопке и прослушать стандартный звук Windows или просто щелчок, если стандартный звук не установлен.
 
Более серьезной процедурой является функция Windows API MessageBeep:
bool MessageBeep(int uType);
Параметр uType указывает воспроизводимый звук как идентификатор раздела [sounds] реестра, в котором записаны звуки, сопровождающие те или иные события в Windows. С помощью приложения Звук в «Панели управления» пользователь может удалить или установит соответствующие звуки.
 
Параметр uType может иметь следующие значения:
Значение Звук
MB_ICONASTERISK SystemAsterisk - звездочка.
MB_ICONEXCLAMATION SystemExclamation - восклицание.
MB_ICONHAND SystemHand - критическая ошибка.
MB_ICONQUESTION SystemQuestion - вопрос.
MB_OK SystemDefault - стандартный звук.
После запроса звука функция MessageBeep возвращает управление вызвавшей функции и воспроизводит звук асинхронно. Во время воспроизведения приложение может продолжать выполняться.
 
Если невозможно воспроизвести указанный в функции звук, делается попытка воспроизвести стандартный системный звук, установленный по умолчанию. Если и это невозможно, то воспроизводится стандартный сигнал через динамик.
 
При успешном выполнении возвращается ненулевое значение. При аварийном завершении возвращается нуль. Можете в своем тестовом приложении ввести еще одну кнопку и написать для нее обработчик:
MessageBeep(MB_OK);
Вы услышите тот же стандартный звук Windows, что и при выполнении процедуры Веер. Или услышите тот же тихий щелчок, если стандартный звук не установлен. Попробуйте установить различные звуки с помощью «Панели управления» и проверить MessageBeep при различных значениях ее параметра.
 
А теперь давайте займемся более серьезной функцией PlaySound, которая позволяет воспроизводить не только звуки событий Windows, но и любые волновые файлы. Это функция API Windows, параметры которой описаны в модуле mmsystem. Поэтому для использования этой функции в вашем приложении необходимо включить директиву #include <mmsystem.cpp>, поскольку автоматически С++Вuilder ее не включает.
Функция PlaySound определена следующим образом:
bool PlaySound(char *pszSound, HINST hmod, Int fdwSound);
Параметр pszSound представляет собой строку с нулевым символом в конце и определяет воспроизводимый звук. Параметр hmod используется, если звук берется из ресурса. А поскольку далее звуком из ресурса мы пользоваться не будем, то hmod всегда можно задавать равным 0.
 
Параметр fdwSound является множеством флагов, которые определяют режим воспроизведения и тип источника звука. Ниже приведены значения наиболее важные для воспроизведения произвольных волновых файлов:
Значение Описание
SND_ASYNC Звук воспроизводится асинхронно и функция PlaySound возвращается немедленно после начала воспроизведения. Чтобы прекратить асинхронное воспроизведение волнового файла, надо вызвать PlaySound с параметром pszSound,равным 0.
SND_LOOP Воспроизведение звука постоянно повторяется, пока не вызовется PlaySound с параметром pszSound,равным 0. Одновременно надо установить флаг SND_ASYNC асинхронного воспроизведения звука.
SND_NOSTOP Если заданный звук не может быть воспроизведен, поскольку ресурсы, необходимые для воспроизведения, заняты воспроизведением другого звука, функция PlaySound немедленно вернет false,не воспроизводя заданного звука. Если данный флаг не указан, функция PlaySound пытается остановить воспроизведение другого звука, чтобы устройство могло быть использовано для воспроизведения нового звука.
SND_NOWAIT Если драйвер занят, функция сразу вернется без воспроизведения заданного звука.
SND_PURGE Останавливается воспроизведение любых звуков, вызванных в данной задаче. Если pszSound не равен 0, останавливаются все экземпляры указанного звука. Если pszSound равен 0, то останавливаются все звуки, связанные с данной задачей.
SND_SYNC Синхронное воспроизведение звука события. Функция PlaySound возвращается только после окончания воспроизведения.
Звук, указанный параметром pszSound, должен помещаться в доступную память и должен подходить для установленного драйвера устройства воспроизведения волновых файлов. Функция PlaySound ищет файл звука в следующих каталогах: текущем, каталоге Windows, системном каталоге Windows, каталогах, перечисленных в переменной среды PATH, в списке каталогов, предоставляемых сетью. Если указанный звук не находится, функция PlaySound воспроизводит системный звук по умолчанию. Если функция не может найти и его, то воспроизведения не будет, а вернется значение false.
 
Пример №1

Оператор воспроизводит асинхронно и однократно стандартный звук Microsoft, который вы обычно можете слышать при открытии Windows. В процессе воспроизведения продолжается выполнение приложения.
PlaySound("С:\\Windows\\Media\\Звук Microsoft.wav",D,SND_ASYNC); 
Чтобы опробовать функцию PlaySound, введите в свое приложение диалог OpenDialog и кнопку со следующим обработчиком щелчка:
if(OpenDialog1->Execute())
PlaySound(OpenDialog1->FileName.c_str(),0,SND_ASYNC);
Запустите приложение, выберите файл какой-нибудь приятной музыки и работайте со своим приложением, наслаждаясь попутно выбранной мелодией.
 
Пример №2

PlaySound позволяет воспроизводить и системные звуки, просто называя их псевдонимы. Например, оператор воспроизведет тот же звук открытия Windows, что и приведенный ранее оператор, указывавший имя и путь к нему.
PlaySound("SystemStart",0,SND_ASYNC);
 
Пример №3

Оператор многократно асинхронно воспроизводит стандартный звук Microsoft, начиная его снова и снова, как только он заканчивается.
PlaySound("С:\\Wlndows\\Media\\Звук Microsoft.wav", 0, SND_ASYNC | SND_LOOP);
Если вы ввели в свое приложение подобный оператор (пусть даже и с очень приятной музыкой), вам надо предусмотреть еще и какую-нибудь кнопку, по которой воспроизведение прерывается заданием нового звука или выполнением оператора:
PlaySound(0,0,SND_PURGE);
Полезно также ввести аналогичный оператор в обработчик события формы OnCloseQuery, так как звучание будет бесконечным и при работе с некоторыми версиями Windows у вас могут возникнуть проблемы при попытке закрыть ваше приложение. Кстати, подобный оператор в обработчике OnCloseQuery полезен в этих случаях не только при заказе бесконечного воспроизведения, но и в других случаях, когда вы хотите прервать воспроизведение с окончанием работы приложения.

Простое проигрывание mp3 файла

Сделаем простую программку, при запуске которой будет воспроизводится аудио файл формата mp3.
Создаем новый проект и в Form1 пишем следующий код:
HWND MCIHwnd = MCIWndCreate(Application->Handle, HInstance, NULL, "my.mp3");
MCIWndPlay(MCIHwnd);
my.mp3 - наш аудио файл, который, при запуске программы, будет воспроизводится.
 
з.ы. в заголовке необходимо подключить библиотеку #include<vfw.h>

Создание простой мультипликации

Каждый, наверно, примерно представляет себе принципы создания мультипликационных фильмов, знает, что они представляют собой совокупность множества кадров, каждый из которых чуть-чуть отличается от предыдущего. Это при быстром поочередном просмотре кадров создает иллюзию движения. Вам, конечно, в своей работе не придется рисовать с помощью C++Builder мультфильмы. Для этого имеются совершенно другие инструменты. Но некоторые простенькие анимации - оживление изображений, иногда желательно делать. Например, при создании какой-нибудь обучающей программы может захотеться оживить какие-то схемы или условные изображения механизмов, чтобы показать в движении взаимодействие их отдельных составляющих. Или применить анимации типа тех, которые используются в программе Windows «Проводник» при копировании и удалении файлов. Чтобы не связываться с изображениями каких-то механизмов, сделаем нечто всем понятное: например условное изображение человечка, шагающего и бьющего при этом в литавры.
 
Откройте новое приложение, перенесите на форму компоненты Image, кнопку Button и таймер Timer. Кнопку разместите внизу формы. Основную площадь формы должен занимать компонент Image, на котором и будет рисоваться изображение.
 
Таймер будет задавать темп смены кадров. Поскольку в приложении у нас будет всего два кадра, задайте значение свойства Interval таймера достаточно большим, например, 500 (поскольку интервалы задаются в миллисекундах, то это значение соответствует 0,5 сек). Значение параметра Enabled таймера установите в false. Таймер у нас будет управляться кнопкой.
 
Теперь размещение компонентов закончено. Надо ввести текст программы. В заголовочном файле добавьте строку:
void __fastcall Draw();
Это объявление функции, которая будет рисовать изображение. А текст самого модуля может иметь вид: 
short int num = 0;
short int H=20; // шаг
short int Xpos = 2 * H; // координата туловища
short int Ypos = 120; // наша Земля
short int Hmen = 30; // высота тела
short int Rhead = 10; // радиус головы
short int Rhead2 = Rhead/2; // радиус литавров
short int revers = 1; // направление движения
short int L = H * 1.41; // длина ноги
Для формы функции Draw() пишем следующее:
void __fastcall TForml::Draw()
{
short int Yhead;
switch (num)
  {
  case 0:
  Yhead = Ypos-H-Hmen;
  Image1->Canvas->MoveTo(Xpos-H,Ypos);
  Image1->Canvas->LineTo(Xpos,Ypos-H);
  Image1->Canvas->LineTo(Xpos+H,Ypos);
  Image1->Canvas->MoveTo(Xpos,Ypos-H);
  Image1->Canvas->LineTo(Xpos,Yhead);
  Image1->Canvas->MoveTo(Xpos+revers*H,Yhead-H);
  Image1->Canvas->LineTo(Xpos,Yhead+4);
  Image1->Canvas->Ellipse(Xpos+revers*H-Rhead2,Yhead-H-Rhead2,Xpos+revers*H +Rhead2,Yhead-H+Rhead2);
  Image1->Canvas->LineTo(Xpos+revers*H,Yhead+H);
  Image1->Canvas->Ellipse(Xpos+revers*H-Rhead2,Yhead+H-Rhead2,Xpos+revers*H+Rhead2,Yhead+H+Rhead2);
  Image1->Canvas->Ellipse(Xpos-Rhead,Yhead, Xpos+Rhead,Yhead-2*Rhead);
  Image1->Canvas->Rectangle(Xpos-Rhead,Yhead-2*Rhead-1,Xpos+Rhead,Yhead-2*Rhead-4);
  break;
  case 1:
  Yhead = Ypos-L-Hmen;
  Image1->Canvas->MoveTo(Xpos,Ypos);
  Image1->Canvas->LineTo(Xpos,Yhead);
  Image1->Canvas->MoveTo(Xpos,Yhead+4);
  Image1->Canvas->LineTo(Xpos+revers*L,Yhead+4);
  Image1->Canvas->Ellipse(Xpos+revers*L-Rhead2,Yhead+4-Rhead2,Xpos+revers*L+Rhead2,Yhead+4+Rhead2);
  Image1->Canvas->Ellipse(Xpos-Rhead,Yhead,Xpos+Rhead,Yhead-2*Rhead);
  Image1->Canvas->Rectangle(Xpos-H/2,Yhead-2*Rhead-1,Xpos+H/2,Yhead-2*Rhead-4);
  }
}
Для компонента Timer:
Draw();
if((Xpos >= Image1->Picture->Width-H) || (Xpos <= H))
revers = -revers;
Xpos = Xpos + revers * H;
num = 1 - num;
Draw();
Для нашей кнопки запуска анимации:
Timer1->Enabled = ! Timer1->Enabled;
Для нашей формы пишем следующее:
Image1->Canvas->MoveTo (0,Ypos+3);
Image1->Canvas->Pen->Width = 4;
Image1->Canvas->LineTo(Imagel->ClientWidth,Ypos+3);
Image1->Canvas->Pen->Width = 1;
Image1->Canvas->Pen->Mode = pmNotXor;
Draw();
Начнем анализ этого кода с конца - с последней процедуры FormCreate, являющейся обработчиком события OnCreate формы. В этой процедуре рисуется линия, отображающая «землю», по которой будет ходить наш человечек. Затем устанавливается режим пера pmNotXor. И в заключение вызывается процедура Draw, которая рисует исходное положение человечка.
 
Процедура ButtonClick является обработчиком события OnClick кнопки. Каждый щелчок на кнопке включает или выключает таймер, в результате чего человечек идет или останавливается.
 
Процедура Timer1Timer является обработчиком события OnTimer таймера. Это событие означает, что надо стереть прежний кадр и нарисовать новый. Сначала вызывается процедура Draw. Поскольку позиция человечка с момента показа предыдущего кадра не изменилась, то этот вызов рисует на том же самом месте, на котором рисовался предыдущий кадр. Следовательно, предыдущий рисунок стирается. Затем анализируется позиция человечка Xpos. Если эта позиция отстоит от какого-либо конца холста Image1 на величину, меньшую шага H, то изменяется на обратный знак переменной revers, характеризующей направление движения. Если revers = 1, человечек шагает вправо; если revers = -1, человечек шагает влево. Затем позиция Xpos изменяется на величину revers * H, т.е. на шаг вправо или влево. Изменяется переменная num, которая указывает номер высвечиваемого кадра: 0 или 1. В заключение вызывается процедура Draw, которая рисует указанный кадр в указанной позиции.
 
Последняя процедура, которую мы рассмотрим - процедура Draw, рисующая кадр. Она достаточно длинная, но в ней нет ничего сложного. В зависимости от значения num рисуется один или другой кадр, причем в рисунке учитывается позиция Xpos и направление движения revers.
 
Сохраните ваше приложение и выполните его. Щелкнув на кнопке вы можете заставить вашего человечка перемещаться. Достигнув края формы он будет поворачиваться и шагать в обратном направлении. При вторичном щелчке на кнопке он будет останавливаться.

Типы звуковых и мультимедиа файлов

Наиболее простым звуковым файлом является волновой файл .wav. В нем записано цифровое представление информации о волновой форме электрического сигнала, соответствующего каждому звуку. Волновой файл «не знает» вообще ничего о том, что такое звук и что он означает; поэтому для хранения звукового клипа приходится запоминать массу информации.
 
Другим часто применяемым типом файлов-носителей являются файлы цифрового интерфейса музыкальных инструментов (MIDI). Файлы .midi используются для хранения музыкальных фрагментов. В этих файлах звук хранится в виде данных о том, на каких инструментах исполняются определенные ноты и как долго они звучат. Если вы знакомы с музыкой, то можете рассматривать содержимое такого файла как цифровой эквивалент дирижерской партитуры. Одним из главных преимуществ MIDI является то, что файлы получаются сравнительно небольшими. Файлы MIDI относятся к волновым файлам примерно так же, как метафайлы типа .bmp. В обоих случаях файлы первого типа «понимают», какие данные они представляют, а файлы второго типа хранят сырые данные, просто посылаемые на выходное устройство.
 
Волновые и MIDI файлы могут хранить только звук или музыку. Для хранения видео информации разработан ряд форматов. Отметим среди них файлы AVI и MPEG. Большинство видеофайлов поддерживают также хранение звуковой дорожки, так что звук воспроизводится синхронно с картинкой.
 
Что собой представляет видеофайл, и как он работает? Человеческий мозг интерпретирует быструю последовательность изображений, незначительно отличающихся друг от друга, как движение. Каждое из этих изображений называется кадром. Каждый следующий кадр несколько отличен от предыдущего. Чтобы мозг воспринимал смену кадров как плавное движение, желательно воспроизводить около 30 кадров в секунду. Более высокая частота не приводит к заметному росту качества, а более низкая производит впечатление мерцания экрана.
 
Если бы каждый кадр хранился в файле в виде битовой матрицы экрана (а это несколько сотен килобайт), то потребовался бы огромный объем дисковой памяти. При такой простой схеме хранения на компакт-диск, например, можно было бы записать всего 72 секунды видеофильма. Реально для хранения видеофильмов используется техника сжатия видеоданных.
 
Если не углубляться в сложную математику методов сжатия, то суть сводится к следующему. Когда захватывается очередной кадр, аппаратура или программа сжатия задается вопросом: «Можно ли сохранить этот кадр более компактно, если записать только то, что в нем отличается от предыдущего, или нужно сохранить картинку целиком?» Чаще всего выгодно сохранять только изменившиеся части сцены. Но в определенных обстоятельствах, например, при переключении на другую камеру, накладные расходы описания изменений заняли бы больше места, чем непосредственное сохранение кадра.

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

В C++Builder имеется компонент MediaPlayer - универсальный проигрыватель аудио и видео информации. Этот медиа-плеер расположен на странице System библиотеки компонентов. Он инкапсулирует интерфейс управления носителями (Media Control Interface - MCI) 32-разрядных Windows.
 
Компонент можно использовать в двух режимах. Во-первых, можно предоставить пользователю возможность управлять воспроизведением информации с помощью кнопочного интерфейса, напоминающего панель управления различными проигрывателями. Во-вторых, можно сделать сам компонент невидимым и управлять воспроизведением информации с помощью его методов.
 
Назначение кнопок

Кнопка Действие
Play Воспроизведение.
Pause Пауза воспроизведения или записи. Если медиа-плеер в момент щелчка уже в состоянии паузы, то воспроизведение или запись возобновляются.
Stop Останов воспроизведения или записи.
Next Переход на следующий трек или на конец.
Prev Переход на предыдущий трек или на начало.
Step Перемещение вперед на заданное число кадров.
Back Перемещение назад на заданное число кадров.
Record Начало записи.
Eject Освобождение объекта, загруженного в устройство.
К каждой кнопке медиа-плеера соответствует метод, осуществляющий по умолчанию требуемую операцию: Play, Pause, Stop, Next, Previous, Step, Back, StartRecording, Eject.
Тип устройства мультимедиа, с которым работает медиа-плеер, определяется его свойством DeviceType. Если устройство мультимедиа хранит объект воспроизведения в файле, то имя файла задается свойством FileName. По умолчанию свойство DeviceType имеет значение dtAutoSelect. Это означает, что медиа-плеер пытается определить тип устройства исходя их расширения имени файла FileName.
 
Еще одно свойство MediaPlayer - AutoOpen. Если оно установлено в true, то медиа-плеер пытается открыть устройство, указанное свойством DeviceType, автоматически во время своего создания в процессе выполнения приложения.
 
Воспроизведение видео информации по умолчанию производится в окно, которое создает само открытое устройство мультимедиа. Однако это можно изменить, если в свойстве Display указать оконный элемент, в котором должно отображаться изображение. Это может быть, например, форма или панель. Можно также задать в свойстве DisplayRect типа TRect (свойство только времени выполнения) прямоугольную область этого окна, в которую должно выводиться изображение. Для задания свойства DisplayRect можно использовать функцию Rect. Однако в данном свойстве использование этого типа не совсем обычно. Первые две координаты, как и обычно, задают положение левого верхнего угла изображения. А два следующих числа задают ширину и высоту изображения, а не координаты правого нижнего угла.
 
В компоненте MediaPlayer определены события OnClick и OnNotify. Первое из них происходит при выборе пользователем одной из кнопок медиа-плеера и определено как:
enum TMPBtnType (btPlay, btPause, btstop, btNext, btPrev, btstep, btBack, btRecord, btEject);
void __fastcall Click(TObject *Sender, TMPBtnType Button, bool &DoDefault);
Параметр Button указывает выбранную кнопку. Параметр DoDefault, передаваемый по ссылке, определяет выполнение (при значении true по умолчанию) или отказ от выполнения стандартного метода, соответствующего выбранной кнопке.
 
Событие OnNotify происходит после возвращения очередного метода, если свойство медиа-плеера Notify было установлено в true. Способ возврата любого метода медиа-плеера определяется свойством Wait. Если установить Wait равным false, то возвращение управления в приложение происходит сразу после вызова метода, не дожидаясь завершения его выполнения. Таким образом, задав Notify равным true и Wait равным false, можно обеспечить немедленный возврат в приложение и отображения пользователю текущего состояния объекта мультимедиа.
 
Свойства Notify и Wait действуют только на один очередной метод. Поэтому их значения надо каждый раз восстанавливать в обработчиках событий OnClick или OnNotify.
В обработчиках событий можно читать свойство Mode, характеризующее текущее состояние устройства мультимедиа. Можно также читать и устанавливать ряд свойств, характеризующих размер воспроизводимого файла и текущую позицию в нем.
 
Пример

Оператор задает для вывода область с координатами левого верхнего угла (10,10), длиной и шириной, равными 200.
MediaPlayer1->DisplayRect = Rect(10,10,200,200);