Violação de acesso ao Delphi ao mover o botão no formulário

Estou tentando mover 2 botões no formulário usando um loop while para verificar a propriedade de botões à esquerda, mas tenho uma violação de acesso. Estou encerrando o procedimento com CreateThread ()

The code:

procedure AnimButton1();
var ImageCount: integer;
var b1, b2: integer;
begin

  try

       while (b2 <> 187) do
       begin
           b2 := frmNotification.btnBuzina2.Left;
           frmNotification.btnBuzina2.Left := b2 - 1;

       end;

       while (b1 <> 256) do
       begin
           b1 := frmNotification.btnBuzina.Left;
           frmNotification.btnBuzina.Left := b1 - 1;

       end;

  except;
  end;

end;

MAS, quando eu uso um Sleep () com pelo menos 5 milissegundos, não tenho uma violação de acesso, como esta:

procedure AnimButton1();
var ImageCount: integer;
var b1, b2: integer;
begin

  try

       while (b2 <> 187) do
       begin
           b2 := frmNotification.btnBuzina2.Left;
           frmNotification.btnBuzina2.Left := b2 - 1;
           Sleep(5);
       end;

       while (b1 <> 256) do
       begin
           b1 := frmNotification.btnBuzina.Left;
           frmNotification.btnBuzina.Left := b1 - 1;
           Sleep(5);
       end;

  except;
  end;

end;

Alguém poderia me ajudar a descobrir por que, sem o sono, recebo a violação de acesso e, com ela, não?

thx antecipadamente!

questionAnswers(1)

yourAnswerToTheQuestion