Ver Mensaje Individual
  #4  
Antiguo 18-09-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 28
Lepe Va por buen camino
Parece que no se entiende como funciona el VT, así que vamos con Aristóteles:

Filosofía del VirtualTreeview:

Primero hay que entender que su funcionamiento es muy distinto al que trae delphi.

La maravilla de este componente es que en apariencia, puede ser un Treeview + Grid de delphi, con checkbox independientes para cada nodo, es decir, para un nodo (o fila de datos), se puede ocultar el Checkbox.

Cada "celda", puede tener una fuente distinta, negrita, subrayados, etc. Por tanto la apariencia visual queda limitada a la imaginación del programador... vamos... casi nada .

Al ser un componente tan general, y que permite tantas opciones, es normal que todo ha de hacerse por código

Como cada celda tiene muchos parámetros modificables,, en el nodo de un Treeview, no se guarda NADA. Todo lo que quiera mostrarse en un nodo determinado, debe hacerse mediante un registro auxiliar (TRecBase), en ese registro, guardamos la información a mostrar en todas las columnas. Al tiempo de mostrar el arbol, es cuando le decimos por código, que dato va en cada columna.

Al tiempo de mostrar el arbol, es cuando se lanza una serie de eventos que tenemos que controlar. Los más útiles son:

- BeforeCellPaint (podemos cambiar el color de fondo de una celda, por ejemplo).
- GetText (texto que se mostrará en una columna y fila determinada)
- PaintText (usado para modificar la fuente usada en esa celda)

La creación de un nodo (padre, hijo) es bastante facil, su definición es esta:
Código Delphi [-]
    function AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode;
Por tanto necesitamos el nodo padre, el UserData nos olvidamos de él.

Código Delphi [-]
var nodoPadre : PvirtualNode;
     nodoHijo:PvirtualNode;
begin 
  nodoPadre:=   VirtualTreeview1.AddChild(nil);
  nodoHijo   := VirtualTreeview1.AddChild(nodoPadre);
En nodoPadre, tendremos el primer nodo de un Treeview que esté en blanco.
Obviamente nodoHijo, será hijo de su padre

Con esto creamos el nodo, pero la información asociada a cada nodo, tenemos que rellenarlas nosotros. Quiero decir que el VirtualTreeView crea una variable del tipo TRecord por cada nodo creado, pero inicialmente está en blanco, nosotros tenemos que:

- Al crear el nodo: rellenar ese registro.
- Al mostrar el nodo en pantalla: decir qué campo de ese registro se muestra en la columna 1, 2 o en la 3
- Opcionalmente, cambiar la fuente y colores de la celda.

Y todo eso lo hace el ejemplo que he puesto anteriormente que he editado para aclarar algunas cosas.
Responder Con Cita