XCodeR
Я бы сделал что-то наподобие следующего(извини,что код на асме,просто мне влом браться за дельфи

) :
Код:

MainProc proc
; /* Создаём событие, которое будет служить сигналом */
push offset szSplash
push FALSE ; Создаём событие как nonsignaled
push TRUE ; Создаём manual-reset событие
push NULL
call CreateEventA
mov hSplashEvent, eax
; /* Создаём поток */
push NULL
push NULL
push NULL
push offset ShowSplash ; адрес процедуры, где будет создаватся SplashScreen
push NULL
push NULL
call CreateThread
mov hSplashRoutineThread, eax
; /* Имитируем ресурсоёмкую работу */
push 10000
call Sleep
; /* Теперь меняем состояние события, сигнализируя о конце ресурсоёмкой работы */
push hSplashEvent
call SetEvent
; /* Закрываем описатель потока */
push hSplashRoutineThread
call CloseHandle
; /* Закрываем описатель события */
push hSplashEvent
call CloseHandle
ret
MainProc endp
ShowSplash proc
; /* Регистрируем класс создаваемого splash-окна */
...
; /* Создаём само окно */
...
; /* Ждём сигнала из основного потока */
push INFINITE
push hSplashEvent
call WaitForSingleObject
; /* Теперь, когда функция WaitForSingleObject возвратится, уничтожаем окно и снимаем регистрацию класса */
...
; /* Закрываем поток */
push NULL
call ExitThread
ShowSplash endp
При регистрации класса splash-окна необходимо указать отдельную оконную процедуру, которая должна обрабатывать сообщение WM_DESTROY для уничтожения окна.
Примерно так...