FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Componentes con colección
Hola:
¿Cómo puedo crear un componente que use una colección de objetos? Por ejemplo, quiero crear un componente que guarde imágenes y referirme a ellas según el índice: "MiComponente.Imagen[1].Picture". Gracias. |
#2
|
||||
|
||||
Eso no es una colección... es un vector.
Podes hacer un componente que tenga una propiedad "vectorial", asi:
Que se haga dentro de GetPropiedadVector/SetPropiedadVector ya es responsabilidad tuya. Si queres ampliar el tema, recuerdo que el libro La Cara Oculta de Delphi 4, de Ian Marteens (que podes descargar gratuitamente desde la web del autor: http://www.marteens.com) pasa por el tema. Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
||||
|
||||
Cita:
Crear un componente que tenga una propiedad del tipo TCollection, es mas sencillo en algunos aspectos porque por ejemplo: no necesitamos desarrollar un editor de propiedades en particular, el IDE utilizará el de todas las colecciones, y no necesitamos algunos artilugios extra para que esta información quede almacenada y sea persistente. Como desventaja, siempre es "mas económico" hablando de recursos, hablar de vectores que de colecciones. Simplemente para crear un componente de este tipo tenemos que definir una propiedad del tipo TCollection y crear y destruir esta colección en el creador y constructor del componente. Pero eso no es todo, para que esto sea útil tendríamos que definir una colección propietaria. Si es lo necesitas, puedo escribirte algún ejemplo de esto. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#4
|
||||
|
||||
hola ...
Cita:
saludos |
#5
|
||||
|
||||
Wop!
Una colección, en el argot de Delphi, es una instancia de TCollection o una clase que derive de ella. Un vector .... es un vector!
__________________
E pur si muove |
#6
|
||||
|
||||
Una colección simplemente es una clase heredada de TCollection. Esta clase tiene métodos como para eliminae items, agregar items en posiciones aleatorias y otras cuantas utilidades que te recomiendo leer de la ayuda de TCollection. Ademas tenemos la posibilidad de sobreescribir los métodos de la colección como para cambiar la funcionalidad de la misma.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
||||
|
||||
hola nuevamente...
Cita:
Cita:
creo que formule mal mi cuestion.... considerando lo que solicitaban y la respuesta que dio jachguate; buscaba me orientaran cuando considerar utilizar una coleccion y cuando un vector; (queda entendido que utilizar TCollection lleva a implementar/sobreescribir -en su caso- los metodos para adecuar la funcionalidad de la misma)... saludos... y nuevamente las gracias por la explicación y el tiempo para contestar |
#8
|
||||
|
||||
Creo que la principal ventaja de usar una colección, es su capacidad de persistencia. Claro que es un poco mas dificil de montar... asi que si no necesitas de esta persistencia, quizas sea conveniente el uso de un vector.
No se si se me escapa alguna otra... Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#9
|
||||
|
||||
Wop!
Cita:
No pretendía ser irónico, tal y como proponías tu duda pensé que eso la resolvía. Cita:
__________________
E pur si muove |
#10
|
||||
|
||||
me ha quedado claro....
gracias por sus respuestas..... saludos.... |
#11
|
|||
|
|||
Hola:
Perdonen mi ausencia, yo inicié el hilo, leí las respuestas pero no tuve tiempo de responder. Muchas gracias por su interés en ayudar, les estoy realmente agradecido, y valga la redundancia. Bueno, ahora ya sé la diferencia entre un vector y una colección, pero lo que realmente me interesa es lo segundo. Seguí la respuesta de delphi.com.ar (muchas gracias, por cierto) para que mi componente tenga una colección y resultó, era realmente sencillo, pero tengo un problema: - Puedo trabajar normal con el componente, pero si lo elimino ocurre un error grave en todo Delphi. No me permite borrar el componente. Traté añadiendo esta sentencia MiColeccion.Free en el procedimiento destroy, pero no se soluciona el problema. De seguro que el problema está en mi código, es por ello que quisiera ayuda para saber todas las pautas que se deben seguir para poder crear un componente con una colección de objetos. delphi.com.ar estaba dispuesto en enviarme un ejemplo, le estaré muy agradecido si me presta su tiempo para ayudarme. Muchas gracias a todos, mis estimados colegas. |
#12
|
||||
|
||||
Es muy probable que el error esté en el destructor de tu componente. Seguilo paso a paso... a ver si detectas la sentencia que genera el problema. También podes pegar aca el trozo de código del destructor completo, si este no está muy grande.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#13
|
|||
|
|||
De seguro el error está en el destroy (tal vez), pero podrían decirme cuáles son los pasos o las sentencias que se deben poner en un componente que lleve ua colección.
En el club hay un tutorial para la creación de componentes pero no dice nada acerca de las colecciones. Necesito ayuda que me siento fracasado. |
#14
|
||||
|
||||
ninguna sentencia en especial. De lo que debes cuidarte es de llamar a inherited en el destroy.
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#15
|
|||
|
|||
Eso sí lo he hecho, llamo al inherited. Mira, he creado ya otros componentes sin colección y este problema no aparece. Sólo aparece con el componente que tiene colección. Por eso, necesito un ejemplo de un componente con coleccion creado por alguno de Ustedes. El más sencillo que sea, no hay problema. Porque el mío no funciona y realmente no sé por qué.
Gracias |
#16
|
||||
|
||||
¿Tienes algún otro componente nuevo que haga referencia a este o viceversa?
Es comportamiento es típico de componentes o clases con propiedades del tipo TComponent, sin utilizar el método Notification para "desasignar" las variables:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#17
|
||||
|
||||
Yo te enviaría el destructor de alguna mia... pero es que ya busqué y todos tienen inherited nadamas..
Ejemplos abundan en el código fuente de la VCL, por ejemplo en la unidad db.pas: TCheckConstraints, TParams dbGrids.pas: TDBGridColumns y muchos mas. hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
|