Olá Pessoal! Neste artigo iremos aprender a realizar um efeito de rotação em uma imagem utilizando o Firemonkey e a controlar a velocidade dessa rotação através de um componente TTrackBar.

Inicialmente, no Delphi XE2, crie uma nova aplicação HD Firemonkey e adicione ao form principal os seguintes componentes e altere as seguintes propriedades:

TImage (Qde = 1):
Align: alClient;
Bitmap: Utilize uma imagem de sua preferência. No caso, foi utilizada a Figura 1.
Name: Image1;

TTrackBar (Qde = 1):
Frequency: 0,1;
Height: 15;
Max: 10;
Min: 0;
Name: TBVelocidade;
Orientation: orHorizontal;
Value:0;
Width: 257;

TTimer (Qde = 1):
Interval: 1000;
Enabled: true;
Name: RotationTimer;

Imagem utilizada no exemplo

Figura 1: Imagem utilizada no exemplo

Ajuste os componentes até que assumam as características da figura abaixo:

Características Visuais

Figura 2: Características Visuais

A seguir, precisaremos declara algumas variáveis globais para gerenciar a animação. Então, declare as seguintes variáveis como públicas ou privadas no form:

Listagem 1: Declaração de variáveis

var
  Angle : Single = 0; //ângulo de Rotação;
  PrevTime : Double = 0; //tempo anterior
  CurrTime : Double; //tempo atual
  DT: Double; //Diferença entre tempos
  V : Double; //Velocidade de Rotação

Feito isso, declare na sessão private do formulário o seguinte procedure:

Listagem 2: Declaração da procedure AppIdle

    procedure AppIdle(Sender: TObject; var Done: Boolean);  //Pressione Ctrl + Shift + C

Esta procedure será a responsável pela rotação da imagem. Insira o seguinte código no corpo do método:

Listagm 3: Implementação do método

procedure TFrmRotacao.AppIdle(Sender: TObject; var Done: Boolean);
begin
  CurrTime := GetTime; //pega o tempo presente
  if PrevTime <> 0 then
  begin
    DT := CurrTime-PrevTime;
  end;
  PrevTime := CurrTime;
  V := 4000000* DT; //velocidade
  Angle := Angle + TBVelocidade.Value*V;
  if Angle >= 360 then
  begin
    Angle := 0;
  end;
  Image1.RotationAngle := Angle; 
end;

Nota: A velocidade de rotação depende diretamente do valor da TrackBar TBVelocidade através da sua propriedade Value.

Para que o efeito de rotação funcione no Windows, basta adicionar no evento OnCreate do formulário o seguinte código:

Listagem 4: Ativando a animação no Windows

procedure TFrmRotacao.FormCreate(Sender: TObject);
begin
  Application.OnIdle := AppIdle;
end; 

Para que o Efeito de Rotação funcione no Mac OSX, devemos implementar o seguinte código no evento OnTime de RotationTimer (TTimer):

Listagem 5: Ativando a animação no MAC OSX

procedure TFrmRotacao.RotationTimerTimer(Sender: TObject);
var
  Done : Boolean;
begin
  AppIdle(Self,Done); // MacOSX
end;

O resultado final é bastante interessante e um print screen de seu funcionamento nos dois sistemas operacionais suportados é exibido nas figuras a seguir.

Efeito de Rotação no Windows

Figura 3: Efeito de Rotação no Windows

Efeito de Rotação no Mac OSX Lion

Figura 4: Efeito de Rotação no Mac OSX Lion

Agora é com você! Solte a sua imaginação. Um grande abraço e até o próximo artigo!