Delphi - TForm.create(self) o TForm.create(application)

 
Vista:

TForm.create(self) o TForm.create(application)

Publicado por NovatoX (7 intervenciones) el 29/09/2003 22:42:13
Hola listeros, estoy empezando a programar con delphi, quisiera saber cual es la diferencia entre crear un formulario (al hacer click en un boton) con TForm.create(self) y TForm.create(application).
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:TForm.create(self) o TForm.create(application)

Publicado por mamcx (533 intervenciones) el 30/09/2003 00:32:31
Todo objeto visual (=GUI) necesita un padre, el cual se especifica al decir objeto.create(.

Application es el objeto que es padre de todas las formas. Self es una variable dinamica (como result, cuando le damos en una funcion result:=) que es identica al objeto actual (por ejemplo, si das doble click en un formulario, Self es el formulario. Si lo haces en un boton, self es el boton, self significa "el mismo" o "yo")

Por lo tanto, a menos que estes buscando introducir un formulario dentro de otro formulario o control, es mas logico que sea el padre aplication y no self. Pero por los demas controles, es mas normal que sea self (por ejemplo, si creamos un boton en tiempo de ejecucion)
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:TForm.create(self) o TForm.create(application)

Publicado por NovatoX (7 intervenciones) el 30/09/2003 01:23:37
Cometí un error al decir que el código de creacion del Form se realiza en el boton, El boton llama a un metodo del formunario llamado \"nuevoFormulario\" en este metodo es donde va el codigo:

Formulario := TForm.create(self);

He visto otros manuales y alli utilizan este codigo:

Formulario := TForm.create(application)

He probado con los dos y si funciona, lo que quisiera saber es cuando creo el Form de la primera forma o de la segunda forma.

Otra consulta, cuando recien voy a crear el formulario (Formulario) su valor es NIL, Una vez creado el formulario y despues de cerrarlo que valor tiene el objeto Formulario?
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:TForm.create(self) o TForm.create(application)

Publicado por Diego Romero (636 intervenciones) el 30/09/2003 10:41:02
Te lo explico de esta manera, tienes tres objetos, dos de ellos ya creados, a saber:
Application
Form1
Formulario // este no está creado aún.
Application es padre de Form1
Cuando en el código de Form1 pones
Formulario:=TForm.Create(Self); estas diciendo que Form1 es el padre del nuevo formulario, Self se refiere al objeto en ambito al momento de hacer la creación, es decir como estas en Form1 Self es Form1.
Cuando en el código poner:
Formulario:=TForm.Create(Application); entonces el padre es Application, es decir Form1 y Formulario tienen el mismo padre
Esquema del primer caso:
Application -> Form1 -> Formulario
Segundo Caso:
Application -> Form1
\-> Formulario
En el fondo Formulario (y cualquier variable de instalcia de objetos) es un puntero por eso Delphi los inicializa a nil (es decir apuntan a nada), luego de creado el objeto estos contienen una dirección de memoria que es el "punto de entrada" de una estructura en memoria conteniendo todo lo relativo al objeto, propiedades y métodos.
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:TForm.create(self) o TForm.create(application)

Publicado por NovatoX (7 intervenciones) el 01/10/2003 02:09:37
Esta muy claro, pero como consigo q objeto Formulario vuelva a tener el valor NIL?
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:TForm.create(self) o TForm.create(application)

Publicado por mamcx (533 intervenciones) el 01/10/2003 02:29:27
Cuando lo desees liberar usa Objeto.Free;
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:TForm.create(self) o TForm.create(application)

Publicado por NovatoX (7 intervenciones) el 01/10/2003 16:09:03
Eso es lo que hice, utilice Free y despues FreeAndNil pero nada, ejecuto la funcion Assigned y me sige dando un valor igual a True.
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