du kannst ein Fenster auch semimodal öffnen.
...
Dann raucht aber sein Button-Code ab, denn das Hauptproblem ist, dass der sich nicht beendet, sobald das Fenster zu gehn soll.
Also ginge das Fenster wirklich zu und würde freigegeben.
Auch in deinem Code bleibt es dann in dem ProcessMessages (nach Show) hängen, bis der Button fertig ist.
und da fehlt auch noch eine Schleife um das ProcessMessages, denn sonst rauscht es sofort bis zum Free durch (ShowModal wartet von selber) und die Form ist sofort wieder weg.
Selbst wenn das Fenster geschlossen/ausgeblendet wird, dann müsste danach dennoch bis zur Freigabe gewartet werden, bis der Button fertig ist (was in einem Thread nicht möglich ist ... klingt fast nach 'nem Deadlock).
Also ob sichtbar oder unsichtbar, gewartet werden muß immer, wenn seine Arbeitsschleife sich nicht beendet.