Програма Video Player відповідно, дає змогу переглянути відеоролик форматів AVI або MPG. Вибір кліпа здійснюється в стандартному вікні Відкрити файл, яке стає доступним у результаті клацання на кнопці Eject (speedButton1). Кнопка speedButton2 використовується як для активізації процесу відтворення, так і для його призупинення. Картинки для кнопки завантажуються з ресурсу програми. Слід звернути увагу на те, що програма визначає розмір кадрів відеоролика. Це дає змогу розмістити екран у центрі форми і, якщо розмір кадрів перевищує розмір робочої області форми, виконати маштабування.

Код написання програми
#include vcl.h
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
#define MINUTE(ms) ((ms/1000)/60)
#define SECOND(ms) ((ms/1000)%60)
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MediaPlayer1->Display = Form1;
}
void __fastcall TForm1::GetFrameSize(AnsiString f, int *w, int *h)
{
if ( f.Pos(".mp4") == 0 )
{
*w = 352;
*h = 240;
return;
}
struct {
char RIFF[4];
long int nu_l[5];
char AVIH[4];
long int nu_2[9];
long int w;
long int h;
} header;
TFileStream *fs;
fs = new TFileStream(f,fmOpenRead);
fs->Read(&header, sizeof(header));
*w = header.w;
*h = header.h;
delete fs;
}
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
int fw, fh;
int top,left;
int sw, sh;
int mw, mh;
float kw, kh;
float k;
OpenDialog1->Title = "Âèá³ð êë³ïó";
OpenDialog1->InitialDir = "";
OpenDialog1->Filter =
"Âñ³ ôîðìàòè|*.avi;*.mpg;*.mp4;*.mpeg"
"AVI|*.avi|MPG|*.mpg|MGEG|*.mpeg";
if ( ! OpenDialog1->Execute() )
return;
if ( MediaPlayer1->FileName == OpenDialog1->FileName )
return;
GetFrameSize(OpenDialog1->FileName,&fw, &fh);
mw = Form1->ClientWidth;
mh = Form1->Panel1->Top-10;
if ( fw < mw )
kw = 1;
else kw = (float) mw / fw;
if ( fh < mh )
kh = 1;
else kh = (float) mh / fh;
if ( kw < kh )
k = kw;
else k = kh;
sw = fw * k;
sh = fh * k;
left = (Form1->ClientWidth - sw) / 2;
top = (Panel1->Top - sh) / 2;
MediaPlayer1->FileName = OpenDialog1->FileName;
MediaPlayer1->Open();
MediaPlayer1->DisplayRect = TRect(left, top, left + sw, top + sh);
Form1->Canvas->FillRect(Rect(0,0,ClientWidth,Panel1->Top));
SpeedButton2->Enabled = true;
MediaPlayer1->TimeFormat = tfMilliseconds;
int ms = MediaPlayer1->Length;
AnsiString st = IntToStr(SECOND(ms));
if ( st.Length() == 1)
st = "0" + st;
st = IntToStr(MINUTE(ms)) + ":" + st;
SpeedButton2->Hint = "Pause";
SpeedButton2->Tag = 1;
SpeedButton1->Enabled = False;
MediaPlayer1->Play();
}
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
if (SpeedButton2->Tag == 0)
{
SpeedButton2->Hint = "Pause";
SpeedButton2->Tag = 1;
SpeedButton1->Enabled = False;
MediaPlayer1->Play();
}
else
{
MediaPlayer1->Stop();
SpeedButton2->Hint = "Play";
SpeedButton2->Tag = 0;
SpeedButton1->Enabled = True;
}
}
void __fastcall TForm1::MediaPlayer1Notify(TObject *Sender)
{
if ( ( MediaPlayer1->Mode == mpStopped ) &&
( SpeedButton2->Tag == 1))
{
SpeedButton2->Hint = "Play";
SpeedButton2->Tag = 0;
SpeedButton1->Enabled = True;
}
}
void __fastcall TForm1::FormPaint(TObject *Sender)
{
if ( MediaPlayer1->Mode == mpStopped )
{
MediaPlayer1->Position = 1;
MediaPlayer1->Position = 0;
}
}
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
MediaPlayer1->Close();
}
Файл *.h
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TSpeedButton *SpeedButton1;
TSpeedButton *SpeedButton2;
TMediaPlayer *MediaPlayer1;
TOpenDialog *OpenDialog1;
void __fastcall SpeedButton1Click(TObject *Sender);
void __fastcall SpeedButton2Click(TObject *Sender);
void __fastcall MediaPlayer1Notify(TObject *Sender);
void __fastcall FormPaint(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall GetFrameSize(AnsiString f, int *w, int *h);
};
програмування