![]() |
![]() |
![]() |
Компонент Animate,
значок которого находится на вкладке Win32 (рис. 11.1), позволяет воспроизводить
простую анимацию, кадры которой находятся в AVI-файле.
Рис. 11.1. Значок
компонента Animate
Примечайте
Хотя анимация, находящаяся в AVI-файле может сопровождаться звуковыми эффектами (так ли это — можно проверить, например, при помощи стандартной программы Проигрыватель Windows Media), компонент Animate обеспечивает воспроизведение только изображения. Для полноценного воспроизведения сопровождаемой звуком анимации следует использовать компонент меdiaPlayer.
Компонент Animate добавляется
к форме обычным образом. После добавления компонента к форме следует установить
значения его свойств. Свойства компонента Animate перечислены в табл. 11.1.
Таблица 11.1.
Свойства компонента Animate
Свойство |
Определяет |
||
Name |
Имя компонента. Используется
для доступа к свойствам компонента и управлением его поведением |
||
FileName |
Имя AVI-файла в котором
находится анимация, отображаемая при помощи компонента |
||
StartFrame |
Номер кадра, с которого
начинается отображение анимации |
||
stopFrame |
Номер кадра, на котором
заканчивается отображение анимации |
||
Activate |
Признак активизации процесса
отображения кадров анимации |
||
Color |
Цвет фона компонента (цвет
"экрана"), на котором воспроизводится анимация |
||
Transparent |
Режим использования "прозрачного"
цвета при отображении анимации |
||
Repetitions |
Количество повторов отображения
анимации |
||
Следует еще раз обратить
внимание, что компонент Animate предназначен для воспроизведения AVI-файлов,
которые содержат только анимацию. При попытке присвоить записать в свойство
FileName имя файла, который содержит звук, Delphi выводит сообщение о невозможности
открытия указанного файла (Cannot open AVI). Чтобы увидеть, что находиться
в AVI-файле: анимация и звук или только анимация, нужно из Windows раскрыть
нужную папку, выделить AVI-файл и из контекстного меню выбрать команду Свойства.
В результате этого откроется окно Свойства, на вкладке Сводка
(рис. 11.2) которого будет выведена подробная информация о содержимом выбранного
файла.
Следующая программа,
текст которой приведен в листинге 11.1, демонстрирует использование компонента
Animate для отображения в диалоговом окне программы анимации. Вид формы программы
приведен на рис. 11.3, а значения свойств компонента Animatel — в таблице 11.2.
Рис. 11.2.
На вкладке Сводка отражается информация об AVI-файле
Рис. 11.3. Форма
программы Просмотр анимации
Таблица 11.2.
Значения свойств компонента Animate1
Свойство |
Значение |
||
FileName |
bart.avi |
||
Active |
False |
||
Transparent |
True |
||
После запуска программы
в форме выводится первый кадр анимации. Программа обеспечивает два режима просмотра
анимации: непрерывный и покадровый.
Кнопка Button1 используется
как для инициализации процесса воспроизведения анимации, так и для его приостановки.
Процесс непрерывного воспроизведения анимации инициирует процедура обработки
события Onclick на кнопке Пуск, которая присваивает значение True свойству Active.
Эта же процедура заменяет текст на кнопке Button1 с Пуск на Стоп. Режим воспроизведения
анимации выбирается при помощи переключателей Ra-dioButton1 и RadioButton2.
Процедуры обработки события Onclick на этих переключателях изменением значения
свойства Enabled блокируют или, наоборот, делают доступными кнопки управления:
активизации воспроизведения анимации (Buttoni), перехода к следующему (Button2)
и предыдущему (Buttons) кадру. Во время непрерывного воспроизведения анимации
процедура обработки события OnCkick на кнопке Стоп (Buttoni) присваивает значение
False свойству Active и тем самым останавливает процесс воспроизведения анимации.
Листинг 11.1.
Использование компонента Animate
unit
ShowAVI_; interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1
= class(TForm)
Animate1:
TAnimate; // компонент Animate
Button1:
TButton; // кнопка Пуск-Стоп
Button2:
TButton; // следующий кадр
Button3:
TButton; // предыдущий кадр
RadioButton1:
TRadioButton; // просмотр всей анимации
RadioButton2:
TRadioButton; // покадровый просмотр
procedure Button1Click(Sender: TObject);
procedure
Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
procedure
RadioButton2Click(Sender: TObject);
private
{
Private declarations } public
{
Public declarations ) end;
var
Form1:
TForm1; // форма
CFrame:
integer; // номер отображаемого кадра
// в режиме покадрового просмотра
implementation
{$R *.DFM}
//
к следующему кадру
procedure
TForm1.Button2Click(Sender: TObject);
begin
if CFrame = 1 then Button2.Enabled := True;
if
CFrame < Animate1.FrameCount then begin
CFrame
:= CFrame + 1;
//
вывести кадр
Animate1.StartFrame
:= CFrame;
Animate1.StopFrame
:= CFrame;
Animate1.Active
:= True;
if
CFrame = Animatel.FrameCount // текущий кадр — последний
then Button2.Enabled:=False;
end;
end;
//
к предыдущему кадру
procedure
TForm1.Button3Click(Sender: TObject);
begin
if
CFrame = Animate1.FrameCount
then Button2.Enabled := True;
if
CFrame > 1 then begin
CFrame
:= CFrame — 1;
//
вывести кадр
Animate1.StartFrame
:= CFrame;
Animate1.StopFrame
:= CFrame;
Animate1.Active
:= True;
if
CFrame = 1 // текущий кадр — первый
then Form1.Button3.Enabled := False;
end;
end;
// активизация режима просмотра всей анимации
procedure TForml.RadioButtonlClick(Sender: TObject);
begin
Buttonl.Enabled:=True;
//доступна кнопка Пуск
//
сделать недоступными кнопки покадрового просмотра
Form1.Button3.Enabled:=False
;
Form1.Button2.Enabled:=False;
end;
//
активизация режима покадрового просмотра
procedure
TForm1.RadioButton2Click(Sender: TObject);
begin
Button2.Enabled:=True; // кнопка Следующий кадр доступна
Buttons.Enabled:=False;
// кнопка Предыдущий кадр недоступна
// сделать недоступной кнопку Пуск — вывод всей анимации
Buttonl.Enabled:=False;
end;
// пуск и остановка просмотра анимации
procedure TForm1.ButtonlClick(Sender: TObject);
begin
if
Animate1.Active = False // в данный момент анимация не выводится
then
begin
Animate1.StartFrame:=l;
// вывод с первого
Animate1.StopFrame:=Animate1.FrameCount;
// по последний кадр
Animate1.Active:=True;
Button1.caption:='Стоп';
RadioButton2.Enabled:=False;
end
else // анимация отображается
begin
Animate1.Active:=False;
// остановить отображение
Button1.caption:='Пуск';
RadioButton2.Enabled:=True;
end;
end;
end.
Компонент Animate позволяет
программисту использовать в своих программах стандартные анимации Windows. Вид
анимации определяется значением свойства СommonAVI. Значение свойства задается
при помощи именованной константы. В табл. 11.3 приведены некоторые значения
констант, вид анимации и описание процесса, для иллюстрации которого используется
эти анимации.
Таблица 11.3.
Значение свойства comonAVi определяет анимацию
Значение |
Анимация |
Процесс |
||
aviCopyFiles | ![]() |
Копирование файлов | ||
AviDeleteFile | ![]() |
Удаление файла | ||
aviRecycleFile | ![]() |
Удаление файла в корзину |
![]() |
![]() |
![]() |
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.
|
![]() |