El por qué del asunto te lo está diciendo
jhonny indirectamente, el problema lo tenias aqui:
Código Delphi
[-]
With TForm2.Create(Self) Do
Begin
Show;
end;
que Form2 está creado??? pues no, no lo está, yo no lo veo por ninguna parte en ese código. ¿Entiendes a lo que me refiero?
Lo que está creado es una ventana del tipo TForm2, pero la variable Form2 no está apuntando a esa ventana.
En principio, Form2 está declarada como una variable, y debería estar apuntando a nil (al iniciar el programa), traspasar un puntero nulo, es el access violation que te mostraba.
Solo un comentario más a lo aportado por
jhonny. Como bien dices el padre de todas las ventanas es la ventana MDI, pero el
dueño de cada ventana, tal y como lo ha puesto jhonny es
Application, por tanto, al cerrar la aplicacion, intentará destruir Form1, Form2 y Form3.
Desconozco si tienes puesto caFree en el Onclose de las ventanas hijas, y para ser honesto, desconozco si te dará error tal y como está. Puede que al terminar la aplicacion no te de fallos porque el objeto Application "sepa" que las ventanas ya han sido destruidas, pero repito, no lo sé.
Si además deseas que al cerrar Form1 se cierren Form2 y Form3 automáticamente, entonces solo tienes que cambiar de dueño Form2 así: TForm2.Create(Form1) y el dueño de Form3 que sea el Form2.
Espero que te haya servido.
Saludos.