Simulando os alertas do MSN

Como simular alertas do tipo MSN

Uma grande variedade de softwares hoje em dia vem se utilizando de mensagens em tela no estilo MSN. São as famosas pop-up’s que surgem próximo ao relógio do Windows e geralmente chamam a atenção do usuário porque usam de uma animação bem simples. Elas surgem subindo devagar e logo em seguida desaparecem. MSN, Skype, Anti-vírus Avg entre outros vem usando e abusando desta prática.

Neste artigo vou mostrar de mais simples como criar em nosso software um alerta bastante eficaz.

Criando e explicando o projeto

Para nosso exemplo criaremos dois formulários, uma para ser a tela principal e outro será nossa tela de alerta.

Não precisamos ir muito longe para entender o que faremos. Basicamente temos que criar um loop para mover a janela de alerta “X” pixels para cima até chegar no ponto de parada.

Para ficar inteligente, vamos pegar a altura da barra de tarefas, que pode ser variável, e criar uma fórmula para calcular a posição (Top) inicial e final do nosso form de alerta.

Codificando

Em nosso form principal coloque um Button e nele digite o algoritimo da Listagem 1. Nossa tela de exibição ficará semelhante ao mostrado na Figura 1.

 

Figura 1. Tela de alerta em ação

Modifique as propriedades do FormAlerta conforme a Tabela 1.

 

Propriedade

Valor

BorderStyle

bsToolWindow

Caption

Alerta do Sistema

FormStyle

fsStayOnTop

Color

$0080FFFF

Tabela 1. Propriedades do FormAlerta

Listagem 1. Algoritimo para exibição do Alerta

procedure TForm1.Button1Click(Sender: TObject);

var

  I: Integer;

  fAlertaMsn: TForm;

  BarraIniciar: HWND; {Barra Iniciar}

  tmAltura: Integer;

  tmRect: TRect;

  xTop : Integer;

  xIniTop : Integer;

begin

  //localiza o Handle da janela iniciar

  BarraIniciar := FindWindow('Shell_TrayWnd', nil);

  //Pega o "retângulo" que envolve a barra e sua altura

  GetWindowRect(BarraIniciar, tmRect);

  tmAltura := tmRect.Bottom - tmRect.Top;

  fAlertaMsn := TfAlertaMsn.Create(Self);

  with fAlertaMsn do

  begin

    Left := Screen.Width - ClientWidth;

    if tmRect.Top = -2 then

      tmAltura := 30;

    //Pega o top final

    xTop := Screen.Height - ClientHeight - tmAltura;

    //Pega o top inicial

    xIniTop := Screen.Height + ClientHeight + tmAltura;

    Top := xIniTop;

    for I := xIniTop downto xTop do

    begin

      Top := Top - 1;

      Show;

      Update;

      Application.ProcessMessages;

      Sleep(10);

    end;

    Sleep(3000);

    Close;

    FreeAndNil(fAlertaMsn);

  end;

end;

Conclusões

Neste artigo aprendemos a criar uma tela de alerta simples. Agora mãos a obra e altere da melhor forma possível para que seu aplicativo fique cada vez mais atraente. Até a próxima.