![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
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í. |
|
#2
|
||||
|
||||
|
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 .... |
|
#3
|
|||
|
|||
|
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!!! |
|
#4
|
||||
|
||||
|
Llego 5 días tarde, pero en fin, daré mi opinión, ya que me doy por aludido en el tema.
Cuando he estado en una situación similar (scrollBox con Tframes), la forma más rápida de sincronizar ambos es: - Los frames y paneles con Owner al ScrollBox - Al borrar un panel, refrescar todo , es decir, hacer un scrollbox.DestroyComponents (que no debería usarse... pero está ahí para ser usado ), y después inicializar el array (poniendo los frames del array a nil, ya que el ScrollBox los liberó). Por ultimo, creo todos los paneles/frames de nuevo.Otro método (sería lo suyo, pero implica más trabajillo), usar el Notification, me explico: Cuando un componente del Form se va a liberar, informa a su dueño (si lo tiene) de este hecho, de forma que el dueño, no intentará liberarlo cuando se cierre. Ejemplito: Un form con un botón y un TEdit, en el botón pones el código "edit1.Free". Ejecutas el proyecto, pulsas el botón (el Edit desaparece del Form) y cierras el proyecto con la X roja. No produce ningún error, porque el Edit informó al Form que se iba a liberar y ya el Form lo quitó de su lista de componentes que controla su destrucción. Si el Form intenta liberar por segunda vez el Edit,daría un Access Violation. Solo hay un problema: que tu array se entere que el componente frame se ha liberado. Para eso, puedes guardar en el Frame.Tag el índice donde se encuentra en vLista. No tenemos ese código, pero en algún momento harás algo así: vLista[n].vFrame := FrameRecienCreada; pues agregas otra línea: FrameRecienCreada.Tag := n ; Y ahora en el form, añades lo siguiente:
Saludos!
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|