FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Destruir objetos
Buenos días:
En una aplicación que estamos desarrollando, creamos una serie de objetos TImage dinámicamente, ya que no sabemos de antemano cuántas deben crearse. Lo hacemos mediante el siguiente código, una vez hemos encontrado en la base de datos las imágenes necesarias: Código PHP:
El problema está en que el usuario puede repetir la operación, con lo que aparecen nombres duplicados, con su correspondiente error. ¿Cómo puedo hacer para poder hacer referencia a dichas imágenes creadas para destruirlas antes de realizar la nueva consulta? Gracias David Rguez. |
#2
|
||||
|
||||
Puedes utilizar un TList o un TStringList (a mi me gusta más este, ordenado y como cadena el nombre del componente); Cuando necesites encontrar uno los buscas y eliminas la imagen y el elemento de TStringList.
Te he puesto el código "al vuelo" sin compilar ni nada, así que talvez exista algun error de sintaxis.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
Pensaste en la posibilidad de utilizar un TObjectList.
|
#4
|
||||
|
||||
Podrias crear una lista de los componentes que vas creando y los destruis o los reutilizas en la nueva consulta.
Algo asi: Declaras la lista, en el private de tu form
lo creas en el FormCreate
en FormDestroy lo destruis
y lo usas asi:
No he probado el codigo, asi que puede contener errores.
__________________
[Crandel] |
#5
|
|||
|
|||
Se me había ocurrido utilizar un array de TImage para mantener una referencia a todas las imágenes. Pero... ¿cómo hago para destruir el objeto completo? No me permite acceder si no especifico un elemento del array.
|
#6
|
||||
|
||||
Cita:
|
#7
|
|||
|
|||
Crandel: He probado tu idea y ha funcionado perfectamente. Gracias |
#8
|
||||
|
||||
Cita:
__________________
[Crandel] |
#9
|
||||
|
||||
Cita:
__________________
[Crandel] |
#10
|
||||
|
||||
Cita:
|
#11
|
||||
|
||||
Cita:
En este caso parece que la propiedad Name del componente es ideal para eso. No lo he mirado, pero supongo que la búsqueda en lo TObjectList debe ser secuencial.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#12
|
||||
|
||||
Me he perdido un rato de conversación....
Yo también insisto (pesado que es uno...). Si se van a destruir todos los objetos a la vez, da igual utilizar TObjectList que TStringList, pero si se van buscando de uno en uno para volver a crearlos, crea que es más eficiente TStringList. NOTA: También hay que ver de cuantos objetos estamos hablando. Si son 5 (por decir algo) es prácticamente lo mismo. Incluso las inserciones serán más lentas en TStringList, pero si en un número un poco grande se gana mucho en los accesos.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#13
|
|||
|
|||
¿Qué ventajas tiene? En este caso en concreto solo necesitamos la lista para mantener una referencia para luego poder "cargarnos" las imágenes y evitar así que se dupliquen en una operación posterior.
|
#14
|
||||
|
||||
Cita:
Cuando añadimos un objeto a un TObjectList este se convierte en el dueño del objeto, esto implica, entre otras cosas, que cuando haces Free o FreeAndNil sobre el TObjectList automáticamente se liberan todos los objetos de la lista. En conclusión, si se necesita hacer búsquedas por nombre, el TStringList es lo mejor, si por el contrario lo que nos interesa es que liberar los objetos sea un proceso transparente para nosotros entonces un TObjectList es una buena opción. |
#15
|
||||
|
||||
Muy buen apunte seoane pero para localizar un Objeto en el TObjectList podríamos usar el
que trae el TObjectList y en ese caso ¿no seria igual de efectivo buscar un objecto en un TObjectList que en un TStringList?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#16
|
||||
|
||||
Cita:
|
#17
|
||||
|
||||
Se que como parámetro hay que pasarle un Objeto y al de el TStringList un string pero lo que trato de preguntar es ¿Que tan rápido(Eficiente) es buscar la posición de un objeto con este método? ¿Es igual de rápido que buscar el nombre de un objeto en un TStringList?
Pregunto esto porque si la respuesta es positiva, me parecería que en ultimas el TStrinList no terminaria siendo la mejor opción para ninguno de los dos casos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!" http://www.purodelphi.com/ http://www.nosolodelphi.com/ |
#18
|
||||
|
||||
Cita:
EDITO: Veo que es lo mismo que te ha dicho Seoane.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#19
|
||||
|
||||
Pongamos un ejemplo jhonny. Si yo tengo una lista de objetos, y quiero acceder a un objeto sabiendo solo su nombre, no podría usando el método que tu indicas.
|
#20
|
||||
|
||||
Cita:
Si lo que necesitas es lo que planteaste al principio, con el codigo que te di es suficiente. Ventajas de TStringGrid, en el caso tuyo es mas facil buscar un componente segun el nombre de la imagen que posee. Ventaja del TObjectList, por ejemplo queres que al hacer doble click sobre la imagen este elimine o que se agrande en otra ventana. Tenes funciones mas rapidas como Remove(AObject: TObject) y IndexOf(AObject: TObject) que vienen de 10 en estos casos. Si no te interesa tanto esto. Dejalo como esta. pd: No quiere decir que con el Tlist no se pueda hacer busqueda, tambien se puede, es la clase base de las otras clases, por lo que las otras agregan algunas funcionalidades extras. Cita:
__________________
[Crandel] |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Crear y destruir formas dinamicamente | ing_gera | C++ Builder | 1 | 16-02-2007 00:45:23 |
destruir Aplicacion | jubers85 | Varios | 2 | 10-02-2006 09:27:40 |
Como destruir o liberar una forma | maguib | Varios | 1 | 11-03-2005 19:39:02 |
Destruir un TIBQuery | furniman | Varios | 1 | 25-03-2004 12:20:14 |
No puedo destruir ventana | Marina | Varios | 2 | 02-12-2003 13:43:58 |
|