FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Crear varios objetos de un mismo tipo
Hola
En mi aplicación tengo un botón que, cada vez que se pulsa, genera un nuevo objeto con una determinada información. El código es el siguiente
Mis dudas son las siguientes: ¿Existe una forma mas elegante de hacerlo que asignándolo a una matriz? ¿Se podría hacer con un objectlist, por ejemplo? En ese caso, ¿como podría ver las propiedades, variables, etc. del objeto, utilizados en el código anterior, ya que lo he intentado y no lo consigo? ¿Al cerrar cualquiera de los forms generados, mediante el aspa de la parte superior derecha, se libera el objeto de éste o hay que mandar un close en el evento FormClose? Gracias por vuestra atención |
#2
|
|||
|
|||
Hola...
Como bien comentas, puedes hacer uso de la clase TObjectList:
Ahora, si usas Delphi 2010 o superior, podrías usar la clase genérica TObjectList<T>:
Sobre el liberar el formulario al cerrarlo, tendrías que usar el evento OnClose poniendo el valor de la variable Action en caFree:
Espero que con esta pequeña explicación se resuelva tu problema. Saludos... Nota: Donde veas < TFrmVerNota > debes ponerlo todo sin espacios, esto lo hice así por que el foro elimina el contenido de <TFrmVerNota> si lo escribo todo junto. Última edición por maeyanes fecha: 16-05-2013 a las 16:21:42. |
#3
|
|||
|
|||
Muchisimas gracias maeyanes.
De pequeña explicación, nada. Me has dado una respuesta elaborada y muy clara. Me han funcionado correctamente los cambios que he hecho con ObjectList, a partir de tu código y anotaciones. No he conseguido que funcione el borrado en el ObjectList, seguro que debido a un error mio. Me produce un 'Access violation at address...'. Me queda la duda de que pasa cuando cierro el form por medio del aspa superior derecha ¿Sólo se hace un .hide del form, pero no se destruye el objeto? ¿Si borro el objeto de la lista de objetos, se pierde su referencia?. Si es así quedaría liberado sólo con esa operación o habría que hacer el Action := caFree de todos modos? En fin, un saludo y gracias de nuevo. |
#4
|
|||
|
|||
Hola...
El error Access violation at address... se produce por una omisión mía. Te explico: la clase TObjectList puede 'tomar' posesión de los objetos que se agregan, esto se traduce a que, al eliminar un objeto de la lista, esta lo destruye automáticamente. Para evitar el error de acceso de memoria, tienes que crear el objeto TObjectList pasando False como valor del parámetro del constructor:
con esto le indicas a la lista que no debe destruir los objetos al eliminarlos de la esta. Entonces el código del evento OnClose ya te debería funcionar sin errores. Sobre tu duda al cerrar el formulario, si usas el código que te puse de ejemplo, este se destruirá cada vez que uses el botón cerrar del fomulario (la famosa aspa superior derecha ) Saludos... |
#5
|
|||
|
|||
Hola Maeyanes, he cambiado la creación de la lista tal como me comentas, pero sigue produciendo 'Access violation...'
¿Puedes explicarme un poco mas detalladamente el código que me pasas para liberar el formulario? hay detalles que no tengo claros. Por ejemplo: ¿La propiedad sería 'FNotes' o 'Remove'
¿ '.Notes' tengo que definirla a priori?
Gracias una vez mas por todo |
#6
|
|||
|
|||
Hola...
¿Podrías poner el código completo de como lo estás haciendo ahora? Saludos... |
#7
|
|||
|
|||
Hola Maeyanes, disculpa el retraso. He tenido un pequeño accidente doméstico y no he podido contestar antes.
No puedo poner el código, ya que lo tengo en mi lugar habitual de trabajo y en un par de semanas no podré pasarme por allí. Si ves alguna manera de contarme la lógica de declaración de la propiedad en la clase TFrmVerNota para pasar el objeto te lo agradecería. Un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Modificar propiedad de varios componentes del mismo tipo | chartres | Varios | 3 | 30-12-2011 20:59:25 |
Varios detail en un mismo QReport | alastor | Impresión | 2 | 27-06-2006 18:30:31 |
Varios details en un mismo group? | subzero | Impresión | 1 | 26-09-2005 19:08:34 |
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo | morfeo21 | Varios | 5 | 17-08-2004 17:39:51 |
Varios RemoteDataModule en un mismo servidor | Toni | Providers | 2 | 02-06-2004 20:50:01 |
|