[...] action=canone, dann Objekte freigeben, action =cafree [...]
Das Zuweisen von caNone ist sinnlos, denn der Wert den man zuweist wird logischerweise erst nach dem verlassen des Events ausgewertet - somit nach allem, was man darin schreibt, egal wann und welchen Wert man Action zuweist
Warum ist das nicht so gut?
Bei der Hauptform fällt das nicht auf, weil Delphi beim schließen ja automatisch die Anwendung beendet.
Aber bei anderen schon: Die Form wird erzeugt - wenn man nichts ändert von Delphi automatisch. Dabei wird OnCreate aufgerufen: Du erzeugst deine Objekte. Jetzt schließt man die Form (entweder per Code ".Close" oder der Nutzer macht es mit "X", etc.) und das Event OnClose wird aufgerufen: Du gibst die Objekte frei. Die Instanz der Form ist aber noch da, wird eben nur nicht angezeigt. Wenn man sie jetzt mit .Show wieder anzeigt, wird natürlich nur das Event OnShow ausgelöst und nicht noch einmal OnCreate. Somit hast du dann eine Form mit nicht existierenden Objekten.