Hola Diana Carolina.
El código de creación y liberación de ventanas de tu post #3, no debería generar el error de
Access violation.
Cuando en el evento
OnClose de FrmClientes asignas
Action:= caFree, Delphi no llama a
Free sino a
Release quien hace un
PostMessage con el mensaje
CM_RELEASE.
PostMessage pone el mensaje en la cola de mensajes asociado al hilo que creo la ventana y retorna sin esperar a que se procese el mensaje. Cuando haces
FrmClientes.Free, si el mensaje aún no fue procesado se descarta.
Es decir que no importa que en FrmClientes utilizes
Action:= caFree y luego lo liberes con
Free. Prueba de eso es que al eliminar la línea en tu
post #10 continuaste obteniendo la excepción.
Podés verificarlo mediante una simple prueba con dos forms.
Form1:
Código Delphi
[-]
...
procedure TForm1.Button1Click(Sender: TObject);
begin
try
if Application.FindComponent('Form2') = nil then
Form2 := TForm2.Create(Self);
Form2.ShowModal;
finally
Form2.Free;
end;
end;
...
Form2:
Código Delphi
[-]
...
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
...
Y ya te podés pasar el día cliqueando el botón y cerrando Form2 que no vas a obtener un error.
Me inclino a pensar que la cosa viene por otro lado... ¿ Podrías poner el código de FrmClientes.OnCreate ?
Un saludo.