Элементарное решение - цикл.
{ Ожидание завершения анимации }
while Timer1.Enabled do
begin
Application.ProcessMessages;
Sleep(5);
end;
{ Вывод окна }
...
Это похоже на правду, но я не понимаю, как это должно работать. А пока я не понимаю, я не могу это применять.
К тому же, я уже пытался что-то похожее писать, но чё-то оно у меня не работало. Возможно, я что-то не так делал.
А структура — простейшая: вся логика происходит в обработчике событий мыши PaintBox-а, на котором я рисую (ну, т.е. рисую-то я на Bitmape, но это несущественно).
Грубо говоря, OnMouseUp и сбоку бантик (т.е. таймер) — вот и вся структура. Это ж Сапёр, а не что-то там хитровымудренное.
Ты используешь LCL
Насколько я понимаю, под Виндой любая GUI-библиотека, использующая нативные контролы, будет так или иначе базироваться на цикле обработки событий.
А раз так, то какая разница: LCL, не LCL...
Возможно, библиотеки, рисующие свои собственные контролы, работают по каким-то другим принципам, но я пока в эту сторону не смотрел.
А анимацию я сперва хотел сделать в виде какой-нибудь условной гифки, но у LCL с этим напряжёнка.
К тому же, какой-неибудь ЧатГПТ мучать, чтобы он мне гифку нарисовал, — это долго. Он же тупой, как валенок, да ещё и «галлюцинирует» постоянно.
А вот алгоритмизировать простенькую анимацию — это дело нехитрое. Поэтому я и сделал по таймеру.
Я лет 20 (а то и 25) не брал в руки шашек.

Последний раз на Паскале писал, ещё когда он был TP6 или BP7 (уже не помню точно), да и то — просто пару консольных утилиток. Так что щас за каждым чихом приходилось лезть в гугл. А я же просто чисто для себя делаю простенькую игрушку, чисто по фану. А тут всё настолько криво и костыльно, что ну ё-моё...