Ver Mensaje Individual
  #39  
Antiguo 03-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Cita:
Empezado por coso Ver Mensaje
no no, es una correcion ...el nodo anterior y el siguiente (al menos, tengo entendido) tienen q ser del mismo tipo, para crear la 'cadena', aunque seguro q hay variedades con la clase inicial. Saludos
Para algo están los moldeos de tipos. Ten en cuenta que TObjectList está definido para añadir y borrar TObject, pero que casualidad, ese tipo de dato es el base de cualquier otro en delphi, por tanto, puedes añadir TComponents, TImage, TForm... o lo que quieras, incluso mezclarlos en la misma lista de objetos, porque en definitiva, todos son TObject.

Ejemplo:
Código Delphi [-]
var l :TObjectList;
begin
   l := TObjectList.Create(true);
  l.add(image1); // un Timage que tienes en el form puesto
  l.add(panel1); //  un panel 

// Para acceder a las propiedades del TImage;
TImage(l.items[0]).Picture.LoadFromFile('c:\miimagen.bmp');

Para acceder al panel:
TPanel(l.items[1]).Caption := 'Ups mi panel';

Para generar un error gordo:
TPanel(l.items[0]).Caption := 'jaja, error'
// obviamente he guardado un Timage en el índice 0 de la lista
// pero ahora le digo a delphi que lo trate como un panel (moldeo de tipos).
// Delphi me hará caso y lo intenta, pero al acceder a una propieda
// que en teoría es de un panel y que no tiene el Timage, 
//  (el indice cero de la lista)
// nos mostrará un ¿access violation?

l.free; // la magia del polimorfismo

La última linea tiene miga:
- Al crear el TobjectList le pasamos en el parámetro un True, eso le indica
que cuando liberemos la lista, libere tambien los objetos que tiene dentro.

- Pero, si tiene dentro un Timage y el otro es un panel, ¿cómo sabe delphi liberarlos? cada uno hace una cosa distinta al liberarse, por ejemplo:

- el Timage debe liberar la imagen que tenga en su propiedad Picture
- el Tpanel debe liberar los controles que tenga dentro (si tiene alguno)

Esa es la magia del polimorfismo:
Tanto el Timage como el TPanel heredan de TObject, así que cuando ejecutas

l.items[0].free

no se ejecuta el método Free del TObject, en realidad se ejecuta el método Free del Timage o del TPanel, según sea el caso.

rgstuamigo, como ves esa "lista genérica que quieres hacer" está ya hecha, aunque debes comprender los conceptos para poder usarla con toda su potencia.

Aún quieres usar records, punteros o lo que quieras, adelante, no seré yo el que te ate las manos .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 03-10-2008 a las 21:20:17. Razón: corrección ortográfica
Responder Con Cita