Completo un poquito más:
Cita:
Empezado por jachguate
Lo que se crea en el OnCreate, debiera destruirse en el OnDestroy.
|
Y no tiene nada que ver que se creen dinámicamente o estáticamente las ventanas.
El
ciclo de vida es el mismo para ambos tipos de Forms.
En honor a la verdad,
poliburro ha detectado el fallo del access violation, pero creo no ha sabido explicarse porque tanto
jachguate como yo lo hemos malinterpretado.
1º- Deja el StringList en el oncreate como lo tenías. Liberas la lista en el OnDestroy.
2º- El access violation es problema de cómo usas tus ventanas, no tiene nada que ver con el TStringList.
Si tu ventana se llama FrmClientes (por decir algo) y esa variable la usas en todas tus ventanas, en el Onclose añade:
Código Delphi
[-]
procedure TFrmclientes.OnClose(... Action:TCloseAction);
begin
action := cafree;
frmClientes := nil;
end;
cuando necesites usar la ventana de nuevo, comprueba si ya está abierta:
Código Delphi
[-]
if Frmclientes <> nil then
else
FrmClientes := TFrmclientes.Create(self);
FrmClientes.Close;
Si no usas la variable FrmCliente en tu aplicación, es decir, creas las ventanas así:
Código Delphi
[-]
var f:TFrmClientes;
begin
f := TFrmclientes.Create(nil / application / self);
with TFrmclientes.Create(...) do
try
finally
Free
end;
Entonces no puedes usar el evento OnClose para poner la variable FrmClientes a nil,
siempre deberías usar FreeandNil(f) o de la variable que uses.
Saludos