Компонент Animate
Компонент Animate, значок которого находится на вкладке Win32 (рис. 4.1), позволяет воспроизводить простую, не сопровождаемую звуком анимацию, кадры которой находятся в AVI-файле.

Рис. 4.1. Значок компонента Animate
Компонент Animate добавляется к форме обычным образом. После того как компонент будет добавлен к форме, следует выполнить его настройку — установить значения свойств. Свойства компонента
Animate перечислены в табл. 4.1.
Таблица 4.1. Свойства компонента Animate
Свойство
|
Описание
|
Name
|
Имя компонента. Используется для доступа к свойствам компонента и для управления его поведением
|
FileName
|
Имя AVI-файла, в котором находится анимация, отображаемая при помощи компонента
|
FrameWidth
|
Ширина кадров анимации
|
FrameHeight
|
Высота кадров анимации
|
FrameCount
|
Количество кадров анимации
|
AutoSize
|
Признак автоматического изменения размера компонента в соответствии с размером кадров анимации
|
Cente-r
|
Признак центрирования кадров анимации в поле компонента. Если значение свойства равно true и размер компонента больше размера кадров (AutoSize = false), кадры анимации располагаются в центре поля компонента
|
StartFrame
|
Номер кадра, с которого начинается отображение анимации
|
StopFrame
|
Номер кадра, на котором заканчивается отображение анимации
|
Active
|
Признак активизации процесса отображения анимации
|
Color
|
Цвет фона компонента (цвет "экрана"), на котором воспроизводится анимация
|
Transparent
|
Режим использования "прозрачного" цвета при отображении анимации
|
Repetitions
|
Количество повторов отображения анимации
|
CommonAVI
|
Определяет стандартную анимацию Windows (см. табл. 4.2)
|
Компонент Animate позволяет программисту использовать в своих программах стандартные анимации Windows. Вид анимации определяется значением свойства
CommonAVI. Значение свойства задается при помощи именованной константы. В табл. 4.2 приведены некоторые константы, вид анимации и описание процессов, для иллюстрации которых используются эти анимации.
Таблица 4.2. Значение свойства conwonAVI определяет анимацию
Значение
|
Анимация
|
Процесс
|
aviCopyFiles
|
 |
Копирование файлов
|
aviDeleteFile
|
 |
Удаление файла
|
aviRecycleFile
|
|
Удаление файла в корзину
|
Следует еще раз обратить внимание, что компонент Animate предназначен для воспроизведения AVI-файлов, которые содержат только анимацию. При попытке записать в свойство
FileName имя файла, в котором находится сопровождаемая звуком анимация, возникает исключение и C++ Builder выводит сообщение об ошибке
Cannot open AVI.
Следующая программа (вид ее диалогового окна приведен на рис. 4.2, а текст— в листинге 4.1) демонстрирует использование компонента
Animate для просмотра анимации.

Рис. 4.2. Форма программы "Просмотр анимации"
После запуска программы в форме будет выведен первый кадр анимации, которая находится в каталоге проекта. Если ни одного файла с расширением
avi в каталоге проекта нет, то поле компонента Animate останется пустым.
Имя файла, в котором находится анимация, можно ввести в поле Edit1 или выбрать в стандартном диалоговом окне
Открыть файл, которое становится
доступным в результате щелчка на кнопке Выбрать. Доступ к стандартному диалоговому окну
Открыть файл обеспечивает компонент opendialog1. Значок компонента
opendialog находится на вкладке Dialogs.
Программа "Просмотр анимации" обеспечивает два режима просмотра: непрерывный и по кадрам. Кнопка
Button1 используется как для инициализации процесса воспроизведения анимации, так и для его приостановки. Процесс непрерывного воспроизведения анимации инициирует процедура обработки события
onclick на кнопке Пуск, которая присваивает значение true свойству
Active. Эта же процедура заменяет текст на кнопке Button1 с "Пуск" на "Стоп". Режим воспроизведения анимации выбирается при помощи переключателей
RadioButton1 и RadioButton2. Процедуры обработки события Onclick на этих переключателях изменением значения свойства
Enabled блокируют или, наоборот, делают доступными кнопки управления: активизации воспроизведения анимации (Buttoni), перехода к следующему (Button2) и предыдущему (Buttons) кадру. Во время непрерывного воспроизведения анимации процедура обработки события
onckick на кнопке Стоп (Buttoni) присваивает значение false свойству
Active и тем самым останавливает процесс воспроизведения анимации.
Листинг 4.1. Использование компонента Animate
// обработка события OnCreate
void__fastcall TForml::FormCreate(TObject *Sender)
{
TSearchRec sr; // содержит информацию
//о файле, найденном функцией FindFirst
// найдем AVI-файл в текущем каталоге
if (FindFirst("*.avi",faAnyFile, sr) == 0)
{
Editl->Text = sr.Name;
/* если анимация содержит звук, то при
выполнении следующего оператора произойдет
ошибка, т. к. компонент Animate обеспечивает
воспроизведение только простой,
не сопровождаемой звуком анимации */
try
{
Animatel->FileName = sr.Name;
}
catch (Exception &e)
{
return;
}
RadioButtonl->Enabled = true;
RadioButton2->Enabled = true;
Buttonl->Enabled = true; } }
// щелчок на кнопке Выбрать
void __fastcall TForml::Button4Click(TObject *Sender)
{
OpenDialogl->InitialDir = "";
// открыть каталог, из которого
// запущена программа
OpenDialogl->FileName = "*.avi";
// вывести список AVI-файлов
if ( OpenDialogl->Execute()) {
// пользователь выбрал файл и нажал кнопку Открыть
// Компонент Animate может отображать только простую,
// не сопровождаемую звуком анимацию. Поэтому
// при выполнении следующей инструкции возможна ошибка
try
{
Animatel->FileName = OpenDialogl->FileName;
}
catch (Exception &e)
{
Editl-XText = "";
// сделаем недоступными кнопки управления
RadioButtonl->Enabled = false;
RadioButton2->Enabled = false;
Buttonl->Enabled = false;
Button2->Enabled = false;
Button3->Enabled = false;
// сообщение об ошибке AnsiString msg =
"Ошибка открытия файла " +
OpenDialogl->FileName +
"ХпВозможно анимация сопровождается звуком.";
ShowMessage(msg); return;
}
Editl-XText = OpenDialogl->FileName;
// отобразить имя файла
RadioButtonl->Checked = true;
// режим просмотра — непрерывно
Buttonl->Enabled = true;
// кнопка Пуск доступна Button2->Enabled = false;
// кнопка Предыдущий кадр недоступна
Button3->Enabled = false;
// кнопка Следующий кадр недоступна
RadioButtonl->Enabled = true;
RadioButton2->Enabled = true;
}
}
// щелчок на кнопке Пуск/Стоп
void__fastcall TForml::ButtonlClick(TObject *Sender)
{
if (Animatel->Active)
{
// анимация отображается, щелчок на кнопке Стоп
Animatel->Active = false; Buttonl->
Caption = "Пуск";
RadioButton2->Enabled = true;
}
else // щелчок на кнопке Пуск
(
// активизировать отображение анимации
Animatel->StartFrame = 1;
// с первого кадра
Animatel->StopFrame = Animatel->FrameCount;
// по последний кадр
Animatel->Active = true;
Buttonl->Caption = "Стоп";
RadioButton2->Enabled = false;
}
}
// выбор режима просмотра всей анимации
void __fastcall TForml::RadioButtonlClick(TObject *Sender)
{
Buttonl->Enabled = true; // кнопка Пуск/Стоп доступна
// сделать недоступными кнопки режима просмотра по кадрам
Button2->Enabled = false;
Button3->Enabled = false;
Animatel->Active = false; }
// выбор режима просмотра по кадрам
void __fastcall TForml::RadioButton2Click(TObject *Sender)
{
Buttonl->Enabled = false; // кнопка Пуск/Стоп недоступна
Button2->Enabled = true; // кнопка Следующий кадр доступна
Button3->Enabled = false; // кнопка Предыдущий кадр недоступна
// отобразить первый кадр
Animatel->StartFrame =1;
Animatel->StopFrame = 1;
Animatel->Active = true;
CFrame =1; // запомним номер отображаемого кадра
}
// щелчок на кнопке Следующий кадр
void__fastcall TForml::Button2Click(TObject *Sender)
{
CFrame++;
// отобразить кадр
Animatel->StartFrame = CFrame;
Animatel->StopFrame = CFrame;
Animatel->Active = true;
if (CFrame > 1)
Button3->Enabled = true;
if (CFrame == Animatel->FrameCount)
// отобразили последний кадр
Button2->Enabled = false;
// кнопка Следующий кадр недоступна }
// щелчок на кнопке Предыдущий кадр
void__fastcall TForml::Button3Click(TObject *Sender)
{
if (CFrame == Animatel->FrameCount)
// последний кадр Button2->Enabled = true;
CFrame—;
// отобразить кадр
Animatel->StartFrame = CFrame;
Animatel->StopFrame = CFrame;
Animatel->Active = true;
if (CFrame == 1)
Button3->Enabled = false;
// кнопка Следующий кадр недоступна
}
|