Я тут такой "велосипед" проверил :
- Код: Выделить всё
-  procedure TForm1.TimeSleep ;
 Var
 StartTime:QWord;
 begin
 StartTime:=GetTickCount64;
 While  GetTickCount64-StartTime<5000 do
 begin
 Application.ProcessMessages;
 end;
 mainform.panel7.Caption:='  Терминал';
 end;
 ...
 procedure TForm1.Timer3Timer(Sender: TObject);
 begin
 ...
 // Типа "отложенная задержка" не тормозящая исполнение  программы.
 // Что для обработчика таймера очень критично .
 TThread.Queue (nil, TimeSleep );
 ...
 end;
 
Зы
Почти квантовая механика  с ее знаменитым "отложенным выбором ".  
 
  
Application.ProcessMessages; можно было не вызвать  а поставить Sleep (100)  но я не решился ( как я понял TThread.Queue () "вырывает" исполнение TimeSleep из основного потока программы но черт его знает в каком контексте он выполняется . Не хватало еще ядро оси повесить ) . А так вроде работает и не тормозит таймер.
Особый прикол несколько вызовов TThread.Queue подряд (По идее поток программы "проскочит дальше", а коды в вызываемых процедурах "станут в очередь"  вроде возможно "параллельное исполнение" однако реально новый поток не создается, а просто используется некий "другой" ( возможно родительский  например проводника  )      )