Meines Erachtens ist ein grundlegender Unterschied zwischen der asynchronen Reaktion auf ein beliebiges Ereignis, und dem Warten auf die Beendigung eines Tasks, um dann mit dem
normalen Programmablauf fortzufahren.
Und die Übergabe als Prozedur funktioniert überhaupt nicht, oder nur mit gröbsten Verrenkungen bzw. völlig unnötigen Rekursionen, wenn der Aufruf der Form in einer Schleife stattfindet.
Delphi-Quellcode:
repeat
Berechne;
Form1.ShowSemiModal;
berechneweiter;
until BefriedigendesErgebnis;
Du solltest vielleicht nochmal nachlesen was der TE eigentlich wollte. Er möchte in dem Formular, das dieses SemiModalDingens aufrufen wird, z.B. das Menü weiterhin bedienbar haben und eben nicht in einer Schleife landen, in der der Benutzer nur durch Schließen des SemiFensters irgendwie fortfahren kann.