Messenger

 

Como posso fazer um formulário vibrar, como ocorre no MSN Messenger quando alguém quer chamar atenção? Para quem gosta de colocar efeitos especiais (e inúteis) no formulário, esta é uma excelente dica:

 

uses Windows

 

procedure WindowShake(wHandle: THandle);

const

  MAXDELTA = 4;

  SHAKETIMES = 500;

var

  oRect, wRect :TRect;

  deltax: integer;

  deltay: integer;

  cnt: integer;

  dx, dy: integer;

begin

  //lembre da posição original

  GetWindowRect(wHandle,wRect);

  oRect := wRect;

  Randomize;

  for cnt := 0 to SHAKETIMES do

  begin

    deltax := Round(Random(MAXDELTA));

    deltay := Round(Random(MAXDELTA));

    dx := Round(1 + Random(2));

    if dx = 2 then

      dx := -1;

    dy := Round(1 + Random(2));

    if dy = 2 then

      dy := -1;

    OffsetRect(wRect,dx * deltax, dy * deltay);

    MoveWindow(wHandle, wRect.Left,wRect.Top,wRect.Right -

      wRect.Left,wRect.Bottom - wRect.Top,true);

  end;

  //returna à posição de início

  MoveWindow(wHandle, oRect.Left,oRect.Top,oRect.Right -

    oRect.Left,oRect.Bottom - oRect.Top,true);

end;

  

Adicione o código em um botão, por exemplo:

  

procedure TForm1.Button1Click(Sender: TObject);

begin

  WindowShake(Application.MainForm.Handle)

end;

 

Walter Alves Chagas Junior