nie wystarczy tylko utworzyć okna w innym wątku - wątek tworzący formatkę jest odpowiedzialny za obsługę kolejki komunikatów tego okna, a wiesz co to oznacza? że komunikaty nie będą spływać do silnika VCL i że (AFAIK) Application.ProcessMessages() w niczym nie pomoże, bo obsługuje kolejkę komunikatów tylko głównego wątku. przemyśl, czy na pewno chcesz zrobić tak jak myślisz, bo jak dla mnie jest to strzał w kolano. tak jak napisał b0bik: główny wątek jest od VCL (czyli jest Twórcą i Władcą Wszystkich Formatek), a do pracy służą dodatkowe wątki zlecające zmiany stanu kontrolek głównemu wątkowi (Synchronize()). można też dyskutować o synchronizowaniu dostępu do kontrolek pomiędzy wątkami - tak żeby żadne dwa nie zmieniały jednocześnie tej samej kontrolki - ale część zmian (np. repainty) leży poza dostępnym kodem i jest zawsze wykonywana przez wątek główny, więc wg mnie to też nie jest dobre rozwiązanie, bo nie ma jak synchronizować się z VCL.
ergo - zrefactoruj program według zasad ying-yang, w ten sposób łatwo rozwiążesz problem obecny i tuzin następnych.
@othello: thread-unsafe nie oznacza, że formularz nie może być utworzony w dowolnym wątku. problemy związane z asynchronicznym dostępem do obiektów powstają, kiedy DWA lub więcej wątki jednocześnie odwołują się do jednej zmiennej i co najmniej jeden z nich zapisuje. tu mamy jeden wątek - bo jeden wątek tworzy formatkę i ten sam jeden wątek obsługuje kolejkę komunikatów oraz zmienia stan kontrolek w tejże formatce. gdzie widzisz problem?