PDA

Ver la Versión Completa : Ficha disponible


dvdjr
17-05-2003, 22:37:15
Hola a todos, cómo ya sabeis con delphi hay dos tipos de fichas: las creadas automáticamente y las fichas disponibles.

Me gustaría sabes cómo crear una ficha disponible. A ser posible con un ejemplo. Gracias a todos y un saludo.:confused:

Ruben_Cu
18-05-2003, 02:43:22
Hola dvdjr, para lo relacionado con tu pregunta revisa el hilo
www.clubdelphi.com/foros/showthread.php?s=&threadid=364 (http://)
Ahí está la respuesta en dos variantes.
Saludos

marcoszorrilla
18-05-2003, 11:47:46
Hola Ruben un saludo desde España.

Veo que el vínculo que has puesto, no sé por qué no funciona.

Por lo tanto, añado una de las formas que hay de crear una ficha disponible, es
creas el formulario y luego vas a Project Options y la veras en la parte izquierda:
AutoCreate-Forms.
La pasas a la derecha "Available" es decir disponible.

En su evento OnClose debes de escribir.
Action:=CaFree;
para liberar memoria cuando la cierres.

Ahora para llamarla desde el programa.

Application.CreateForm(TMiFormulario, MiFormulario);
MiFormulario.ShowModal; //

Te he puesto ShowModal, pero en realidad utiliza lo opción que quieras.


Un Saludo.

__marcsc
18-05-2003, 13:10:34
Éste es el link que puso Ruben originalmente:

http://www.clubdelphi.com/foros/showthread.php?s=&threadid=364

Saludos.

dvdjr
18-05-2003, 14:11:22
Muchisimas gracias a todos, he resuelto el problema. Un saludo

Ruben_Cu
19-05-2003, 00:42:50
Hola a todos, me comí el http:// en la URL cosas del nuevo diseño del club y me falta de práctica. Gracias a marsc por tirarme un capote (como dicen por allá);)
Saludos

roman
19-05-2003, 16:58:36
Posteado originalmente por marcoszorrilla
En su evento OnClose debes de escribir.
Action:=CaFree;
para liberar memoria cuando la cierres.

Ahora para llamarla desde el programa.

Application.CreateForm(TMiFormulario, MiFormulario);
MiFormulario.ShowModal; //


En el ejemplo que pones, el objeto Application será el dueño (owner) del formulario por lo que se encargará de la destrucción de éste. No es necesario lo del caFree.

// Saludos

marcoszorrilla
19-05-2003, 19:33:33
Perdona pero discrepo en el siguiente punto:

Si abro un formulario que está disponible y lo cierro sin la opción CaFree.

Despues de cerrado puede seguir accediendo a él, de lo que se infiere, que se cierra pero no libera recursos.

ShowMessage(Form2.caption), me funciona perfectamente despues de cerrar el formulario 2, no es así si le aplico CaFree en el evento Onclose del mismo.

Supongo que lo que quieres decir es que cuando se cierre la aplicación, se liberarán los recursos de este formulario y por ende de cualquier otro que estuviese abierto.

Yo me refería a un formulario que se crea de la manera que indiqué y que cuando se cierra queremos que libere todos sus recursos.

Para fortalecer mi opinión he añadido al form2 un tedit. si lo cierro
y desde form1 hago : ShowMessage(form2.edit1.Text), me muestra sin ningún prolbema el contenido del edit1 que está en el formulario 2, pero si le aplico CaFree, me devuelve una excepción por intentar acceder a un objeto que no existe, sin duda destruido por CaFree.

//
Occurs when the form closes.

type
TCloseAction = (caNone, caHide, caFree, caMinimize);

TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;

property OnClose: TCloseEvent;

Description

Use OnClose to perform special processing when the form closes. The OnClose event specifies which event handler to call when a form is about to close. The handler specified by OnClose might, for example, test to make sure all fields in a data-entry form have valid contents before allowing the form to close.
//

Un Saludo.

roman
19-05-2003, 20:16:11
Marcos, tienes toda la razón en lo que dices. Al cerrar el formulario puedes seguir referenciándolo ya que no se ha destruido. Se destruirá cuando el objeto que lo "posee" (el owner) se destruya, en este caso la aplicación.

La idea de owner en el VCL es facilitar la liberación de recursos dejándole la tarea al dueño de los objetos. Si se desea manejar uno mismo la liberación entonces no es necesario asignar un Owner como en:


Application.CreateForm(TMiFormulario, MiFormulario);


sino que basta poner:


MiFormulario := TMiformulario.Create(nil);


// Saludos

marcoszorrilla
19-05-2003, 20:27:13
Bueno Roman un saludo, siempre es interesante contrastar tus enfoques.

Un Saludo desde España.