FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Como liberar frame
Hola, tengo dudas si es correcto eliminar un frame como lo hago, os pongo el ejemplo
Tengo un tipo creado por mi, un registro, y un array abierto de ese registro
Evidentemente el frame se crea en tiempo de ejecucion, cuando inicializo la variable de tipo TLista hago lo siguiente
Seria correcto liberar el frame de esa forma, gracias!!! |
#2
|
||||
|
||||
Hola oscjae.
En líneas generales la idea es correcta, pero para obtener los límites del arreglo dinámico usa las funciones Low y High:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
||||
|
||||
Respuesta corta: Sí, si todos los frames tienen el mismo Owner.
Respuesta larga: No es aconsejable porque... Ese código te dará problemas si los frames están en diferentes Owners. Cuando creas el Frame, le tienes que pasar el Dueño que lo destruirá; si se destruye el form, hara un "frame.free" y tu array se queda apuntando a una zona de memoria que ya ha sido liberada, por tanto, al liberar tu array, petará el programa con un "Access Violation". Desde ese que ha petado hasta el final del array, se quedan en memoria porque no han podido liberarse. PD: Yo odio los arrays, prefiero un TList o TObjectList.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#4
|
||||
|
||||
Hola Lepe.
Es muy acertada tu observación sobre el peligro con los diferentes Owners y dependerá del código de creación ( que no tenemos a la vista ). Dada la forma en que oscjae hacía la liberación, partí del supuesto que en la creación fijaba a nil como propietario de los frames. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
|||
|
|||
Esta seria la forma de crearlo
El panel en el que lo coloco (vPanelParent) también seria destruido, ya que uso un ScrollBox para ir creando paneles en tiempo de ejecución y colocando dentro los frame, cuando e de eliminar uno por la razón que sea, elimino el frame y también el panel, no se si es la mejor forma de crear un frame en tiempo de ejecución, hasta ahora siempre lo había hecho así. |
#6
|
||||
|
||||
Hola oscjae.
Todos los descendientes de TComponent poseen la propiedad Owner que contiene (o no) al componente propietario y esta se determina por el valor pasado al parámetro en la creación. El propietario se encargará de liberar la memoria del componente poseido cuando él mismo sea liberado. Si fijas la propiedad Owner a nil, estas indicando que no tiene propietario; por lo que liberar la memoria queda bajo tu responsabilidad y es correcto que lo hagas. Cita:
Pero, si el Frame debe liberarse cuando lo hace el Panel contenedor, bién podrías hacer al Panel el Owner del frame, delegandole la responsabilidad de su liberación. Y si todo debe destruirse al destruirse el ScrollBox, podrías usar este como Owner... Todo depende del órden en que se vayan creando y se necesiten ir liberando frames y panels. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
|||
|
|||
Hola ecfisa, la verdad es que como tu dices, todo seria mas sencillo si le doy Owner, el Owner como tu dices seria el panel, el scrollbox nunca se destruye, la idea es ir creando varios TPanel cuando se necesiten, y dentro del panel ira el frame, y claro, también esta la posibilidad de eliminar ese panel, con el frame, claro está, haciéndolo de la forma que tu dices, pasando como parámetro al Create el panel imagino que haciendo un
sería suficiente para no tener que hacer nada con el frame, que lo eliminará su propietario. Gracias!!! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Acceder desde un WebBrowser a un frame que esta dentro de otro frame. | deneus | Delphi para la web | 1 | 25-10-2014 17:51:58 |
Como liberar el qreport | ingabraham | Impresión | 2 | 28-01-2009 01:38:23 |
mostrar frame como modal | peccatum | Varios | 19 | 05-06-2008 19:18:23 |
Como saber si me frame esta creado en cierto evento? | Albano | OOP | 2 | 15-03-2007 23:13:44 |
Como acceder a los componentes de un frame? | CORBATIN | OOP | 7 | 25-07-2003 20:24:23 |
|