Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Альтернатива для Sleep(), но чтобы приложение не зависало

01.01.2007

Часто требуется организовать задержку в выполнении кода, но что бы при этому приложение не зависало, могло реагировать на сообщения Windows, в часности могло перерисовываться..

procedure Delay(ATimeout: Integer);

 
var
  t
: Cardinal;
begin
 
while ATimeout > 0 do
 
begin
    t
:= GetTickCount;
   
if MsgWaitForMultipleObjects(0, nil^, False, ATimeOut, QS_ALLINPUT) = WAIT_TIMEOUT then
     
Exit;
   
Application.ProcessMessages;  // Пришли новые сообщения Windwos , обрабатываем их..
    dec
(ATimeout, GetTickCount - t);
 
end;
end;

 
 

Автор: jack128

Взято из https://forum.sources.ru