logo
Методичка лаб по ООП с ИИТ

Лабораторная работа 10.Создание видеопроигрывателя

Задание 1.

В новом проекте на пустую форму нуж­но поместить одну кнопку (для открытия файлов), один компонент MediaPlayer(System), одну рамку GroupBox(Standard) и один диалог для открытия файлов OpenDialog. В таблице приве­дены значения, которые необходимо задать всем этим компонентам.

Компонент

Свойство

Значение

Form1

Borderlcons

biMaximize

False

Form1

BorderStyle

bsSingle

Form1

Caption

Телевизор "СОНЯ"

Form1

Height

356

Form1

Width

351

Button1

Caption

Открыть

Button1

Left

3

Button1

Тор

296

MediaPlayer1

Left

88

MediaPlayer1

Тор

296

GroupBox1

Caption

GroupBox1

Left

3

GroupBox1

Тор

О

GroupBox1

Height

289

GroupBox1

Width

337

Форма в режиме разработки выглядит следующим образом.

Открывать файл будем нажатием на кнопку. При этом файл будет загружаться в MediaPlayer. Запустить видео на проигрывание или остановить можно будет стан­дартными кнопками на компоненте (в этом примере пусть он остается видимым).

Листинг программы:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, MPlayer;

type

TForm1 = class(TForm)

Button1: TButton;

MediaPlayer1: TMediaPlayer;

GroupBox1: TGroupBox;

OpenDialog1: TOpenDialog;

procedure Button1Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

//открываем файл

if OpenDialog1.Execute=True then

begin

MediaPlayer1.FileName:=OpenDialog1.FileName;

MediaPlayer1.Open;

end;

end;

procedure TForm1.FormActivate(Sender:TObject);

begin

//назначаем область просмотра видеофайла

MediaPlayer1.Display:=GroupBox1;

end;

end.

После открытия файла необходимо немного подождать, затем нажать клавишу Play. Файлы форматов Wave или Mpeg будут воспроизводится.

Лабораторная работа 11. Создание аудиопроигрывателя

Задание1.

1. Создадим новый проект и поместим на форму компонент MediaPLayer(System). Интерфейс проигрывателя будем разрабатывать сами, поэтому сделаем MediaPLayer невидимым (свойство VisibLe=FaLse).

2. Свойства формы нужно задать в соответствии с таблицей.

Свойство

Значение

Borderlcons

False

biMaximize

BorderStyle

bsSingle

Caption

Позолоченный граммофон

Color

clGray

Position

poScreenCenter

3. На форме установите следующие компоненты: шесть кнопок, четыре этикетки, один таймер и один компонент для открытия файлов - OpenDiaLog. Разместите их, как показано на рисунке.. В режиме разработки программы удобно увеличить размеры формы, чтобы все компоненты поместились на нее. Размеры кнопок - 50 х 25 пикселов (Width и Height соответственно). Точность размещения большого значения не имеет, а влияет только на внешний вид.

Надписи на этикетках сделаны просто для наглядности, так они будут выглядеть в режиме выполнения программы, а при запуске эти надписи все равно будут очи­щаться. В Labell (самый большой индикатор) будет показываться текущая пози­ция в файле. В Label2 (справа сверху) должно отображаться имя открытого файлаВ LаЬеlЗ (справа в середине) - длина открытого файла. В Label4 (справа снизу)­сколько осталось времени до конца файла.

Ширина формы (Width) в итоге должна быть равна 309 пикселов, а высота (Height) ­109 . Однако в режиме разработки удобнее временно увеличить шири­ну и высоту формы. В таком случае можно, например, отодвинуть в сторону компоненты, которые не видны.

4. Интерфейс готов, но прежде чем начать писать код, добавим нашему проигрыва­телю еще одну особенность. Когда пользователь будет подводить указатель мыши к какой-либо кнопке, указатель будет принимать форму руки. Для этого свойство сursor каждой из кнопок нужно поменять с crDefault на crHandPoint. Можно запус­тить программу на выполнение и посмотреть, что получилось.

5. Перейдем к написанию кода. Сначала инициализируем все необходимое в FormAc­tivate

procedure TForm1.FormActivate(Sender: TObject);

begin

// инициализация этикеток Label

Label1.Font.Color := clGreen;

Label2.Font.Color := clGreen;

Label3.Font.Color := clGreen;

Label4.Font.Color := clGreen;

Label1.Caption := '00:00';

Label3. Caption:= 'no file...';

Label3.Caption:= '00:00';

Label4.Caption := '00:00';

end;

6. Затем поместите на форму компонент OpenDialog1 и присвойте его свойствам следующие значения:

Свойство Значение

Default Ext wav

Options.ofHideReadOnly True

Options.ofFileMustExist True

Options.ofNoReadOnlyReturn True

Title Open File

7. Для того чтобы открыть окно Filter Editor (Редактор фильтра), дважды щелкните на свойстве Filter.

Заполните две первые строки в колонке Filter Name (Имя фильтра) на­званиями фильтров Wavfiles, а в колонке Filter (Фильтр) вве­дите соответствующие фильтры: *.wav.

Эта процедура выполняется при запуске программы. Содержимое индикаторов устанавливаются в нуль, задается темно-зеленый цвет, благодаря чему в режиме ожидания у нашего проигрывателя, как и у самых популярных программ, индикаторы будут бледнеть.

Здесь также задается фильтр для окна открытия файлов. Чтобы в этом окне не ото­бражались ненужные форматы, допускается только один тип файлов, которые может воспроизводить проигрыватель, - wav.

И затем реализуем возможность открытия звуковых файлов с помощью обработчика нажатия кнопки Buttonl (на которой написано OPEN).

procedure TForm1.Button1Click(Sender: TObject);

//кнопка OPEN

begin

if OpenDialog1.Execute=True then

begin

// открываем файл

MediaPlayer1.FileName := OpenDialog1.FileName;

MediaPlayer1.Open;

// включаем индикаторы

Label1.Font.Color := clLime;

Label2.Font.Color := clLime;

Label3.Font.Color := clLime;

Label4.Font.Color := clLime;

// присваиваем индикаторам значения

Label1.Caption := IntToStr(MediaPlayer1.Position);

Label2.Caption :=MediaPlayer1.FileName;

Label3.Caption := IntToStr(MediaPlayer1.Length);

Label4.Caption := IntToStr(MediaPlayer1.Length-MediaPlayer1.Position);

end;

end;

Практически все содержимое этой процедуры выполняется при условии, что пользователь действительно выбрал какой-то файл. Если он нажал кнопку Отмена в диалоге открытия файлов, то функция OpenDialogl.Execute вернет False, И все, что расположено между begin и end, выполнено не будет.

8. Если запустить программу на выполнение и попробовать открыть какой-нибудь файл, то можно заметить, что значения индикаторов не соответствуют характери­стикам открываемого файла. Дело в том, что значения указаны в миллисекундах. Перепишем процедуру так, чтобы отображаемая на индикаторах информация со­ответствовала действительности, а также вынесем вывод значений на индикаторы отдельную процедуру Output.

procedure TForm1.Button1Click(Sender: TObject);

//кнопка OPEN

begin

if OpenDialog1.Execute=True then

begin

// открываем файл

MediaPlayer1.FileName := OpenDialog1.FileName;

MediaPlayer1.Open;

// включаем индикаторы

Label1.Font.Color := clLime;

Label2.Font.Color := clLime;

Label3.Font.Color := clLime;

Label4.Font.Color := clLime;

// присваиваем индикаторам значения

Output;

end;

end;

10. Теперь создадим еще одну новую функцию MusicToStr, а также процедуру Output, которая преобразует длину файла, текущую позицию или количество оставшего­ся до конца звучания времени в форму, легкую для восприятия.

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

function TForm1.MusicToStr(n: Longint): String;

//процедура преобразует длину файла,

// текущую позицию или количество оставшегося

// до конца звучания времени в St r i ng

// вместо n здесь, соответственно, значение

// переменных pos i t, leng или геmаin

var

s: String;

// рабочая переменная для формирования

// удобочитаемых значений индикаторов

sec: Longint;

min: Longint;

begin

// получаем секунды и минуты из миллисекунд (n)

sec := trunc(n/1000);

min := trunc(sec/60);

sec:= sec - min * 60;

s:= IntToStr(min);

// добавляем строку 0, если секунд меньше десяти

// чтобы получить значение 2: 06, а не 2: 6;

if sec<10 then s:=s + '0'+IntToStr(sec)

else s:= s +' ' + IntToStr(sec);

MusicToStr := s;

end;

На вход функции подается значение в миллисекундах, возвращается готовая для вы­вода на экран строка с минутами и секундами, разделенными двоеточием.

procedure TForm1.Output;

// вывод значений на индикаторы

var

//длина файла, позиция в файле и оставшееся время

leng, posit, remain: Longint;

begin

// читаем свойства проигрывателя

leng:= MediaPlayer1.Length;

posit := MediaPlayer1.Position;

remain := leng - posit;

// выводим значения индикаторов на экран

Label1.Caption := MusicToStr(posit);

Label2.Caption := MediaPlayer1.FileName;

Label3.Caption := MusicToStr(leng);

Label4.Caption := MusicToStr(remain);

end;

Здесь на экран выводятся все необходимые значения (имя, длина файла, сколько времени прошло с начала проигрывания и сколько осталось).

Здесь на экран выводятся все необходимые значения (имя, длина файла, сколько времени прошло с начала проигрывания и сколько осталось). Для преобразования значений в удобную для восприятия форму используется функция MusicToStr.

procedure TForm1.Button3Click(Sender: TObject);

begin

//кнопка PLAY

begin

if mpCanPlay in MediaPlayer1.Capabilities then

MediaPlayer1.Play;

end;

end;

11. Теперь займемся кнопками STOP и PAUSE.

procedure TForm1.Button4Click(Sender: TObject);

begin

//кнопка STOP

begin

if mpCanPlay in MediaPlayer1.Capabilities then

begin

MediaPlayer1.Stop;

MediaPlayer1.Position := 0;

end;

end;

end;

procedure TForm1.Button6Click(Sender: TObject);

// кнопка PAUSE

begin

if mpCanPlay in MediaPlayer1.Capabilities then

MediaPlayer1.Pause;

end;

12. Для кнопки SТOP пишем точно такой же код, как и дЛЯ PLAY. Единственное отличие втом , что вручную устанавливаем в нуль позицию проигрывания.

С кнопкой PAUSE все предельно просто. Метод Pause компонента MediaPlayer все делает сам.

Теперь разработаем возможность перемотки вперед и назад. Для отладки перемот­ки нужен относительно большой звуковой файл, потому что в маленьком некуда перематывать.

procedure TForm1.Button5Click(Sender: TObject);

// кнопка перемотки вперед

begin

if mpCanPlay in MediaPlayer1.Capabilities then

begin

if (MediaPlayer1.Position+10000)<=MediaPlayer1.Length then

MediaPlayer1.Position := MediaPlayer1.Position + 10000

else

MediaPlayer1.Position := MediaPlayer1.Length;

MediaPlayer1.Play;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

// кнопка перемотки назад

begin

if mpCanPlay in MediaPlayer1. Capabilities then

begin

if MediaPlayer1.Position>=10000 then

MediaPlayer1.Position := MediaPlayer1.Position - 10000

else

MediaPlayer1.Position := 0;

MediaPlayer1.Play;

end;

end;

Процедуры, описанные в листингах выше, очень похожи. в НИХ проверяется не произошел ли выход за пределы файла. В случае выхода позиция устанавливается на конец (начало) файла.

13. Для реализации отображе­ния текущей позиции используем таймер.

Свойство IntervaL таймера оставим равным 1000. Этого достаточно, ведь опрос кла­виатуры не нужно проводить несколько раз в секунду. Значение свойства Enabled нужно изменить на FaLse, так как до открытия файла таймер обязательно должен быть отключен.

14. В обработчике события ОпТimег записываем только вызов процедуры Output, ко­торая будет обновлять все надписи на экране. Напомню, что в этой процедуре выводятся также значения длины и имени файла, которые при проигрывании не изменяются, но их нужно выводить при открытии нового фай­ла. Пусть примерно раз в секунду будут выводиться два необязательных значения на экран, зато программа будет более простой и надежной.

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

procedure TForm1.Button1Click(Sender: TObject);

//кнопка OPEN

begin

if OpenDialog1.Execute=True then

begin

// открываем файл

MediaPlayer1.FileName := OpenDialog1.FileName;

MediaPlayer1.Open;

// включаем индикаторы

Label1.Font.Color := clLime;

Label2.Font.Color := clLime;

Label3.Font.Color := clLime;

Label4.Font.Color := clLime;

// присваиваем индикаторам значения

Output;

//включаем таймер

Timer1.Enabled:=True;

end;

end;

Запустите проигрыватель и проверьте звучание файлов.