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;
Figura 1: Imagem utilizada no exemplo
Ajuste os componentes até que assumam as características da figura abaixo:
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.
Figura 3: Efeito de Rotação no Windows
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!