Виснет оно у тебя на sleep(3000).
Сделай так:
Код:
var
i : Integer;
While Form1.ProgressBar1.Position<100 do
Begin
a:=random(15);
Form1.ProgressBar1.Position:=Form1.ProgressBar1.Position+a;
For i := 1 To 30 Do
Begin
Sleep(100);
Application.ProcessMessages;
End;
End;