Клип должен воспроизводиться в диалоговом окне профаммы. Для выбора клипа (AVI-файла) используйте стандартное диалоговое окно Открытие файла. Рекомендуемый вид формы профаммы приведен на рис. 1.47.

Рис. 1.47. Окно программы

( Видео (AVI) Плеер
(с) Культин Н.Б., 2003}
unit Vp_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls, MPlayer, Buttons,
StdCtrls;
Рис. 1.47. Форма программы Video Player
type
TForml = class(TForm)
OpenDialog: TOpenDialog;
SpeedButtonl: TSpeedButton;
SpeedButton2: TSpeedButton;
MediaPlayer: TMediaPlayer;
procedure FormCreate(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButtonlClick(Sender: TObject);
procedure MediaPlayerNotifу(Sender: TObject);
private
{ Private declarations I
public
I Public declarations I
end;
var
Forml: TForml;
implementation
{$R +.dfm}
procedure TForml.FormCreate(Sender: TObject);
begin
MediaPlayer.Display := Forml;
// это можно сделать во время создания
// формы. Но на всякий случай ...
SpeedButtonl.Grouplndex := 1;
SpeedButtonl.AllowAllUp := True;
end;
// возвращает размер изображения AVI-файла
procedure DimAviff: string; var w,h: integer);
var
fst: TFileStream;
// структуру заголовка AVI-файла можно
// найти, например, в ..\CBuilder\Include\aviriff.h
header: record
RIFF: array[1..4] of char; // 'RIFF'
nul: array[1..5] of Longlnt; // не используется
AVIH: array[1..4] of char; // 'avih'
nu2: array[1..9] of Longlnt; // не используется
Width: Longlnt;
Height: Longlnt;
end;
begin
fst := TFileStream.Create(f,fmOpenRead);
fst.Read(header,sizeof(header));
w := header.Width;
h := header.Height;
fst.Destroy;
end;
// щелчок на кнопке Eject — выбор файла
procedure TForml.SpeedButton2Click(Sender: TObject);
var
top,left: integer; // левый верхний угол "экрана"
width,height: integer; // размер экрана
mw,mh: integer; // максимально возможный размер экрана
kh,kw: real; // коэф-ты масштабирования по h и w
к; real; // коэф-т масштабирования
begin
OpenDialog.Title := 'Выбор клипа';
if not OpenDialog.Execute
then exit;
// пользователь выбрал файл
//' определим размер 'и положение
// "экрана" (области на поверхности формы),
// на котором будет выведен клип
DirnAvi (OpenDialog.FileName,width,height) ;
mh:=SpeedButtonl.Top - 10;
mw:=Forml.ClientWidth;
if mh > height
then kh :=1
else kh := mh/height;
if mw > width
then kw :=1
else kw := mw/width;
if kw < kh
then k := kw
else k := kh;
// здесь масштаб определен
width := Round(width * k) ;
height := Round(height * k);
left := (Forml.ClientWidth - width) div 2;
top := 10;
MediaPlayer.FileName := OpenDialog.FileName;
MediaPlayer.Open;
MediaPlayer.DisplayRect := Rect(left,top,width,height);
SpeedButtonl.Enabled := True;
end;
// щелчок на кнопке Play/Stop
procedure TForml.SpeedButtonlClick(Sender: TObject);
begin
if SpeedButtonl.Down then
begin
// начать воспроизведение
MediaPlayer.Play;
SpeedButtonl.Hint := 'Stop';
end
else begin
// остановить воспроизведение
MediaPlayer.Stop;
SpeedButtonl.Hint := 'Play';
end;
end;
// сигнал от плеера
procedure TForml.MediaPlayerNotifу(Sender: TObject);
begin
if (MediaPlayer.Mode = mpStopped)
and SpeedButtonl.Down
then
SpeedButtonl.Down := False; // "отжать" кнопку Play
end; end.