Ver Mensaje Individual
  #14  
Antiguo 15-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-04-2011 a las 05:53:51.
Responder Con Cita