Для отображения анимации используйте компонент Animate. Обратите внимание, что этот компонент работает только с AVI-файлами, в которых нет звука (для отображения анимации, сопровождаемой звуком, использу ется компонент MediaPiayer). Для выбора файла анимации ис пользуйте стандартное диалоговое окно Открытие файла. Реко мендуемый вид окна программы приведен на рис. 1.45.

Рис. 1.45.

{ Просмотр анимации — содержимого AVI-файла.
(с) Культин Н. Б., 2003. **** ВНИМАНИЕ! **** Компонент Animate отображает AVI-файлы,
в которых нет звука! При попытке открыть
файл, в котором находится сопровождаемая
звуком анимация, возникает ошибка. )unit ShowAVI_;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls;
Рис. 1.44. Окно программы Просмотр анимации
Рис. 1.45. Форма программы Просмотр анимации
type
TForml = class(TForm)
Animatel: TAniraate; // компонент Animate
Buttonl: TButton; //Пуск-Стоп
Button2: TButton; // следующий кадр
Button3: TButton; // предыдущий кадр
// режим просмотра
RadioButtonl: TRadioButton; // просмотр всей анимации
RadioButton2: TRadioButton; //покадровый OpenDialogl: TOpenDialog; // диалоговое окно Открытие файла
Button4: TButton; // активизация окна Открытие файла
GroupBoxl: TGroupBox;
Labell: TLabel;
Editl: TEdit;
procedure ButtonlClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure RadioButtonlClick(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure EditlKeyPress(Sender: TObject; var Key: Char);
procedure Button4Click(Sender: TObject);
// это объявленрге вставлено сюда вручную
procedure OpenAVI;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Forml: TForml; // форма
CFrame: integer; // номер кадра, отображаемого
// в режиме покадрового просмотра
implementation
($R *.DFM)
// нажатие клавиши в поле Файл
procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13) and (Length(Editl.Text) о 0) then
OpenAVI;
end;
// Щелчок на кнопке Выбрать
// открывает стандартное диалоговое
// окно Открытие файла
procedure TForml.Button4Click(Sender: TObject);
begin
OpenDialogl.Title := 'Выбрать AVI-файл1;
if OpenDialogl.Execute then
begin
Editl.Text := OpenDialogl.FileName;
OpenAVI;
end;
end;
// пуск и остановка просмотра анимации
procedure TForml.ButtonlClick(Sender: TObject);
begin
if Animate1.Active = False // в данный момент анимация
// не выводится
then begin
Animatel.StartFrame:=l; // вывод с первого кадра
Animatel.StopFrame:=Animatel.FrameCount; // по последний
// кадр
Animatel.Active:=True;
Buttonl.caption:='Стоп';
RadioButton2.Enabled:=False;
end
else // анимация отображается
begin
Animatel.Active:=False; // остановить отображение
Buttonl.caption:='Пуск';
RadioButton2.Enabled:=True;
end;
end;
// активизация режима просмотра всей анимации
procedure TForml.RadioButtonlClick(Sender: TObject);
begin
Buttonl.Enabled:=True; // доступна кнопка Пуск
// сделать недоступными кнопки покадрового просмотра
Forml.Button3.Enabled:=False;
Forml.Button2.Enabled:=False;
end;
// активизация режима покадрового просмотра
procedure TForml.RadioButton2Click(Sender: TObject);
begin
Button2.Enabled:=True; // кнопка Следующий кадр доступна
Button3.Enabled:=False; // кнопка Предыдущий кадр
недоступна
// сделать недоступной кнопку Пуск — вывод всей анимации
Buttonl.Enabled:=False;
Animatel.StartFrame:=1;
CFrame:=1;
end;
// переход к следующему кадру
procedure TForml.Button2Click(Sender: TObject);
begin
if CFrame < Animatel.FrameCount then
begin
CFrame := CFrame + 1;
// вывести кадр
Animatel.StartFrame := CFrame;
Animatel.StopFrame := CFrame;
Animatel.Active := True;
if CFrame = Animatel.FrameCount // текущий кадр —
// последний
then Button2.Enabled:=False;
end;
if CFrame > 1 then Button3.Enabled := True;
end;
// переход к предыдущему кадру
procedure TForml.Button3Click(Sender: TObject);
begin
if CFrame > 1 then
begin
CFrame := CFrame — 1;
// вывести кадр
Aniraatel.StartFrame := CFrame;
Aniraatel.StopFrame := CFrame;
Animatel.Active := True;
if СFrame = 1 // текущий кадр — первый
then Forml.Button3.Enabled := False;
end;
if CFrame < Animate1.FrameCount
then Button2.Enabled := True;
end;
// открывает AVI-файл
procedure TForml.OpenAVI;
begin
Buttonl.Enabled := False;
Button2.Enabled := False;
Button3.Enabled := False;
RadioButtonl.Enabled := False;
RadioButton2.Enabled := False;
try
Animatel.FileName := Edit1.Text;
except
on Exception do
begin
MessageDlg('Ошибка формата АУ1-файла.'+
#13+'(Анимация не должна сопровождаться звуком.)',
mtError,[mbOk],0);
exit;
end;
end;
Buttonl.Enabled := True;
// Button2.Enabled := True;
// Button3.Enabled := True;
RadioButtonl.Enabled := True;
RadioButton2.Enabled := True;
end;
end.