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

Propriedades
  • 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;
    

    Obs: 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.