PDA

Ver la Versión Completa : Liberar formularios


tango01
16-02-2004, 17:45:21
hola gente tengo un problema.

tengo una aplicacion que crea en tiempo de ejecucion todos los forms menos el principal.

ahora, cuando el usuario cierra la sesion, de esta aplicacion, quiero liberar la todos los forms y además asignarles nil.

hasta ahora probe lo siguiente sin exito.

tot := Application.ComponentCount -1;
for i := 0 to tot do begin
if (i < Application.ComponentCount) and (Application.Components[i] <> nil) and (Application.Components[i] is TForm) and (Application.Components[i].Name <> 'fPrincipal') then begin
faux := (Application.Components[i] as tform);
(Application.Components[i] as tform).Free;
faux := nil;
end;
end;


mi problema es que no me toma la asignacion nil, entonces cuando quiero mostrar un formulario que fue liberado, cuando pregunto si es nil para saber si lo tengo que crear, la variable del formulario no es nil y me da errores de acceso de memoria. ...

como puedo resolver este problema?

gracias de antemando por su ayuda.

delphi.com.ar
16-02-2004, 17:59:09
Es que la variable que estas apuntando a Nil, es la variable faux, si el formulario en tiempo de ejecución fue asignado a otra variable, la otra va a seguir manteniendo el valor anterior.


Saludos!

tango01
16-02-2004, 18:12:43
hola delphi.com.ar lo que dices es correcto, pero como puedo asignarle nil si no puedo hacer

(Application.Components[i] as tform) := nil

ni

Application.Components[i] := nil


gracias.

delphi.com.ar
16-02-2004, 18:23:23
El tema es que vas a tener que asignarle nil indistintamente a todas las variables, si los formularios no tienen múltiples instancias, puedes asignarle Nil a la variable en el OnDestroy de los mismos.


Saludos!

tango01
16-02-2004, 18:37:22
la verdad no queria llegar a esa instancia ya que son muchos formularios .. queria ver si podia hacerlo con una rutina generica ... pero si no surge nada tendre que hacer como tu bien dices en el ultimo mensaje.

saludos

delphi.com.ar
16-02-2004, 18:40:58
Sinceramente, en la mayoría de mis "proyectos" no uso ninguna variable para acceder a los formularios, mas que la de los DataModules, y la del formulario principal (MDI). Como no tengo necesidad de comunicarme con los formularios individualmente una vez creado, directamente borro la variable, y los creo simplemente:TMiFromulario.Create(Self);

Saludos!