Вместо Sleep лучше использовать следующий механизм., не будет подвисаний.
Код:
procedure _Delay(dwMilliseconds: Longint);
var
iStart, iStop: DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= DWORD(dwMilliseconds);
end;