Olá pessoal, vamos ver aqui um artigo de Delphi que ensina um componente não muito explorado pelos desenvolvedores, porém com a mudança de sistema operacional, ou seja, do Windows XP para o Vista e agora o Windows 7, este componente acabou precisando de mais um recursos para funcionar, o componente em questão é o TAnimate, localizado na palheta Win32. Podemos encontrar este componente declarado na unit ComCtrls da nossa VCL.

Qual é o objetivo deste componente?

O objetivo é exibir uma animação quando estamos executando um determinado método muito demorado ou nem tanto, mas o intuído é avisar ao usuário que algo está sendo processado.

Demonstrando o exemplo

Figura 1. Demonstrando o exemplo

Vamos entender um pouco as propriedades deste componente:

  • Active: Essa propriedade tem o objetivo de ativar ou desativar a animação do componente;
  • CommonAVI: Essa propriedade tem o objetivo de selecionarmos qual a animação que desejamos visualizar, com base em animações predefinidas. Podemos notar que esta propriedade é do tipo TCommonAVI que nada mais é do que um Enumerado com as seguintes opções: aviNone, aviFindFolder, aviFindFile, aviFindComputer, aviCopyFiles, aviCopyFile, aviRecycleFile, aviEmptyRecycle, aviDeleteFile;
  • FileName: Essa propriedade tem o objetivo de definir um .avi personalizado(junto com o código fonte deste post você pode encontrar um .avi para fazer o teste. Além também de poder criar os seus próprios .avi)
  • Repetitions: Essa propriedade tem o objetivo definir o número de vezes que a animação irá ser executada, caso esteja como 0, ela será ficará em repetição contínua. Caso você definia como 3, por exemplo, logo após a mesma ser executada o método onStop é executado;

Métodos

  • onClose: Esse método é invocado quando usamos o método reset, mas antes dele é executado automaticamente o método onStop;

    Listagem 1: Usando o método onClose

    
            procedure TForm1.Button1Click(Sender: TObject);
            begin
            Animate1.Reset;
            end;
            
  • onOpen: Esse método é invocado quando instanciamos o formulário onde o TAnimado está;
  • onStart: Esse método é invocado quando mandamos ativamos a animação;

    Listagem 2: Usando o método Stop

    
            procedure TForm1.CheckBox1Click(Sender: TObject);
            begin
            if CheckBox1.Checked then
            Animate1.Active := True
            else
            Animate1.Active := False;
            end;
            
  • onStop: Esse método é invocado quando instanciamos o formulário onde o TAnimado está ou então invocamos o método Stop;

    Listagem 4: Usando o método Stop

    
            procedure TForm1.Button1Click(Sender: TObject);
            begin
            Animate1.Stop;
            end;
            

Note que este método também é executado quando instanciamos o formulário que se encontra o TAnimate, sendo assim cuidado com o que você coloca neste método, pois assim que for iniciado o mesmo será executado também.

Uma coisa interessante para comentarmos sobre o TAnimate, é que sua animação não irá ser “interrompida”, caso uma mensagem apareça em Modal, ou até mesmo um formulário, veja na figura abaixo o que estou querendo dizer:

Animação continua mesmo com uma janela Modal aberta

Figura 2. Animação continua mesmo com uma janela Modal aberta

Agora depois de mostrar as principais propriedades e métodos do TAnimate, temos agora a curiosidade que gerou este artigo, ele não funciona no Windows 7 ou Windows Vista, como resolver então?

Basta adicionarmos na nossa clausula uses na unit ShellAnimations, por isso você encontra também na palheta Win32 o componente TShellResources, que tem por finalidade declarar apenas esta uses.

Vamos fazer um teste, usando o o Windows XP, se você tiver é claro, adicione um TAnimate e ative o mesmo, execute esta sua aplicação, veja que funciona, sem problema algum. Pegue este mesmo executável e abra no Windows 7, você verá que não funciona. Pra resolver isso basta você seguir o passo sugerido acima, nada o impede de apagar o TShellResources depois de ter compilado novamente sua aplicação, pois sua funcionalidade é apenas esta, declarar a uses.

Bom vou ficando por aqui, um abraço e até o nosso próximo artigo.