Delphi - PROBLEMA AL DESTRUIR FORMULARIOS

 
Vista:

PROBLEMA AL DESTRUIR FORMULARIOS

Publicado por Sergio (7 intervenciones) el 05/09/2002 11:18:26
Hola gente vereis os cuento:
Tengo una variable que es de tipo TForm que esta dentro d una clase utilizo el constructor para crear un objeto en la variable:
variable := TForm.create(self)
El problema viene al destruir el formulario,pq lo destruyo y la variable deberia de tener valor "nil" y no lo tiene, el que tiene es indefinido.¿Por que ocurre esto? si un objeto se libera es nil, aunque parezca esto una chorrada me fastidia pq lo que quiero hacer es lo siguiente
if varible = nil then
variable := TForm.create(self)
else variable.show;

Si alguien me puede ayudar, lo agradeceria mucho.
Gracias de antemano
Sergi.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:PROBLEMA AL DESTRUIR FORMULARIOS

Publicado por BigLuis (463 intervenciones) el 05/09/2002 19:14:22
Creo que tras la destruccion del formulario para que la variable sea nil tienes que igualarla a este valor ya que la direccion de memoria de la variable, aunque el objeto este destruido, no es nil.
Variable.Free;
variable:=nil;

La ultima parte puedes usar (creo) If assigned(variable) then
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA AL DESTRUIR FORMULARIOS

Publicado por Armando Montoya (28 intervenciones) el 05/09/2002 19:23:52
hola, yo realizo algo como lo siguiente y no me ha fallado, lo uso para crear formas en tiempo de ejecución. Haz un sencillo ejercicio con una aplicacion nueva, la cual tiene de manera implicita un "Form1", agrega otro Form (form2). En el form 1 agrega un Tbutton. Haz click en el menu Project / Options y en la pestaña "Project Options" selecciona el Form2 de la lista "Auto-create forms:" y lo envias a la lista de "Available forms", y haz click en "OK" ; esto quiere decir que el formulario estara disponible pero no creado.
En la unit1 correspondiente al form1 agrega la siguiente linea en la seccion implementation:
implementation
uses unit2;

en el evento click del button que agregaste a la form1 pon el siguiente codigo:

procedure TForm1.Button1Click(Sender: TObject);
var
Ventana:TForm;
begin
Ventana:=TForm2.Create(Self);
Try
Ventana.ShowModal;
Finally
Ventana.Free;
end;
end;

finally se asegura de liberar la variable, intentalo sino me dices, espero que sea eso lo que necesitabas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA AL DESTRUIR FORMULARIOS

Publicado por Fer (269 intervenciones) el 06/09/2002 09:22:47
Aunque hagas algo como:

Objeto.Free;

La variable Objeto no queda "inicializada" a nil. Para asegurarse de ello, hay que hacer lo que dice BigLuis o también se puede utilizar el procedimiento FreeAndNil (Creo que a partir de Delphi 5):

FreeAndNil(Objeto);

Este procedimiento es equivalente a:

Objeto.Free;
Objeto := nil;

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar