Ese error de violación de memoria, se da precisamente porque con “Action = caFree” destruyes el formulario, o mejor dicho liberas el espacio que ocupaba el formulario, con lo cual tendrás que volver a crearlo cada ves que lo necesites (en mi opinión, este es el funcionamiento correcto de una aplicación, crear cuando lo necesites algo y destruir ese algo cuando ya no lo necesites).
Para crear un formulario puedes hacerlo de la siguiente forma:
Código:
#include "Unit1.h"//<-Debes colocar la Unit del formulario que usaras, aunque supongo que eso ya lo hiciste, porque ya manejabas el otro formulario
void __fastcall TForm1::Button1Click(TObject *Sender)
{
/**/
TForm1* PunteroDeForm1 = new TForm1( this /* Este será el propietario del formulario, puede ser también Application o NULL según veas */ );
PunteroDeForm1->Caption = "Una muestra de como cambiar propiedades";
PunteroDeForm1->Show() /* Así lo muestras, tambien puede ser ShowModal(); */;
}
Por otro lado un tutorial que me vino bien ver en mis días fue:
http://c.conclase.net/curso/index.php
Te explica todo de principio a fin, y como recomendación, ponle especial atención a la parte de clases, objetos y punteros el cual es el corazón de cualquier lenguaje orientado a objetos (no solo de C/C++) y si entiendes esto lo demás será super simple