Ich würde mal grob vermuten, dass liegt daran, dass die Form-Variable lokal an die Procedure gebunden ist.
Wenn Du die Prozedur aufrufst, dann wird eine Variable deklariert, und dann ein Objekt der Form-Klasse (Tform2) in diese Variable instanziert. Danach wird das Form angezeigt, und der Programmablauf verschwindet aus der Methode. Danach ist die Variable wieder unbekannt, und wenn du die Funktion dann wieder aufrufst, dann geht das Spiel von vorne los.
Das Programm erzeugt dir deswegen pro Klick ein Formular. Wenn Du die Variable in der Klassen-Definition vom Form1 deklarierst, dann kannst du das nur einmal erstellen, und anzeigen. Aber dann solltest du auch vor dem erstellen aufpassen, ob es bisher noch nicht existiert (mit Assigned).
Hoppla, ganz schön konfus, was ich da geschrieben habe. Ich hoffe, es ist etwas verständlich...
Gruß
Christian