Методы FMX.Controls.TControl Animate...
устарели и не должны использоваться. Вместо этого вы должны использовать Animate...
методы FMX.Ani.TAnimator , например:
FMX.Ani.TAnimator.AnimateInt(Circle1, Height, 150, 0.5, TAnimationType.InOut, TInterpolationType.Linear);
Но для добавления события OnFinish()
вам нужно использовать другой подход, либо (A) объявив анимацию в конструкторе или (B) создав ее в коде.
(A) Объявление анимации в конструкторе
В этом примере мы создаем анимацию для свойства Height
объекта Circle1: TCircle
в нашей форме.
Выберите объект. В Object Inspector
(OI) найдите свойство Height
и выберите его. Обратите внимание, что в столбце значений есть символ диафильма. Это означает, что вы можете оживить это. Обратите внимание, что в поле значения есть выпадающая стрелка. Щелкните по нему и выберите Create new TFloatAnimation
в раскрывающемся меню.
На панели структуры вы можете видеть, что Circle1
теперь имеет дочерний объект с именем FloatAnimation1
. Он должен быть выбран, но если нет, выберите его. В OI теперь вы можете увидеть все опубликованные свойства для анимации, и если вы измените OI для отображения событий, вы найдете настройки для двух событий, OnFinish
и OnProcess
. Двойной щелчок создает события для вас, как обычно.
(B) Создайте анимацию в коде
- Объявите объект анимации в частном разделе вашего form, а также один или два обработчика событий для
OnProcess
и / или OnFinish
. Они должны соответствовать TNotifyEvent
(то есть иметь один параметр Sender: TObject
)
private
...
Anim: TFloatAnimation;
procedure AnimProcess(Sender: TObject);
procedure AnimFinish(Sender: TObject);
В событии
OnCreate
формы (например,
TForm1.FormCreate()
) создайте объект
Anim
и установите его свойства по мере необходимости, например,
Anim:= TFloatAnimation.Create(Self);
Anim.OnProcess := AnimProcess;
Anim.OnFinish := AnimFinish;
Anim.Duration := 0.9;
Anim.StartValue := 41;
Anim.StopValue := 150;
Anim.Parent := Circle1; // The object that the animation will affect must be the parent
Anim.PropertyName := 'Height';
В обоих случаях запишите событие обработчики по мере необходимости, например
procedure TForm2.AnimFinish(Sender: TObject);
begin
Memo1.Lines.Add('Animation finished');
end;