PDA

Ver la Versión Completa : Arrastre TreeNode


falete24
30-01-2009, 09:09:22
Ante todo buenos días.

Tengo un ligero problema con la clase TTreeNode. Os expongo mi caso.
Estoy en el desarrollo de una aplicación que en una de sus pantallas usa el componente Treeview para mostrar una estructura en forma de árbol.

El tema es que las especificaciones de la pantalla me obligan a poder arrastrar un TreeNode fuera del TreeView hacia una "zona de arrastre (TPanel)" y que en ella se cree un icono y el TreeNode en cuestión desaparezca del TreeView.

Tengo mi propia clase TIcono a la que le agregue una propiedad en forma de TTreeNode. Desarrolle el arrastre y todo perfecto el problema viene que cuando apunto el TreeNode del Treeview al TreeNode del TIcono no tengo forma de desasociar el TreeNode del TreeView sin eliminarlo, ya que estaría liberando la zona de memoria y la propiedad TreeNode del TIcono quedaría también limpia.

Espero que se me entienda después de la parrafada y si alguien tiene alguna idea será muy bien recibida.

Muchas gracias a todos de ante mano.

Neftali [Germán.Estévez]
30-01-2009, 09:48:13
...el problema viene que cuando apunto el TreeNode del Treeview al TreeNode del TIcono no tengo forma de desasociar el TreeNode del TreeView sin eliminarlo, ya que estaría liberando la zona de memoria y la propiedad TreeNode del TIcono quedaría también limpia.

Creo que deberías replicar la estructura que arrastras en el TIcono, en lugar de asignar directamentete la del TreeView. Es decir, crear un Treenode nuevo y copiarle todas las propiedades; Así luego podrás liberar el del Treeview.

No se me ocurre otra forma de solucionarlo.:o

Un saludo.

falete24
30-01-2009, 10:06:56
Creo que deberías replicar la estructura que arrastras en el TIcono,....

Gracias por una respuesta tan rápida Neftali. Entiendo la solución que me das, pero lo que pasa es que lo he intentado y no he sido capaz de llevarlos a cabo. El tema es que lo TreeNode destino es una property publica RW de la clase TIcono y no tengo ni idea de como replicar la estructura del Origen.

He buscado hasta en la biblioteca del infierno y nada.

La verdad es que estoy algo perdido.

Neftali [Germán.Estévez]
30-01-2009, 10:53:19
Bueno, sin ver código es difícil, pero supongo que en el Create de TIcono creas el objeto TTreeNode que tengas definido, en el Destroy de TIcono lo liberas.
Y para asignar los valores de uno a otro, simplemente asigna el valor de las propiedades que te interesen (no hacen falta todas).
Supongo que el Text, ImageIndex,... y alguna más.

falete24
30-01-2009, 10:57:34
Ok ahora te pillo mejor.

Perfecto, pero hay un problema añadido que se me olvidó comentar y es que de ese nodo pueden colgar más nodos hijos y aquí es cuando se me jode el invento.

Neftali [Germán.Estévez]
30-01-2009, 12:37:23
Perfecto, pero hay un problema añadido que se me olvidó comentar y es que de ese nodo pueden colgar más nodos hijos y aquí es cuando se me jode el invento.

No se jode el invento, se trata de hacer un procedimiento recursivo (o iterativo, como más rábia te de) que vaya creando el resto de "hijos" que tiene ese nodo dentro.
Un poco más complejo, pero es lo que hay...