
Control TreeView
El control TreeView es un componente de PowerCobol que nos permite presentar de una manera jerárquica una serie de elementos. En realidad es un ListBox con relaciones de jerarquía.
El uso de éste control es muy variado, nos puede ayudar a presentar un menú, un plan contable y en definitiva todo aquella relación de elementos en la que existan opciones que cuelgan unas de otras.
En esta explicación vamos a aprender a utilizarlo y comprender su metodología de programación. Es un control algo distinto, ya que además de sus propiedades incluye objetos que a su vez poseen sus propias propiedades.
Este control tendrá una lista de elementos que llamaremos "primarios" de los que pueden o no colgar otros elementos que llamaremos "padre" que a su vez pueden tener otros elementos que cuelguen de el a los que llamaremos hijos y así indefinidamente. Cada uno de los elementos que contengan otros se llama nodo, los nodos son objetos propios con sus propiedades y sus métodos. Espero explicarme claramente, pero siempre tendréis el fuente del proyecto por si alguna duda no la he aclarado bien.
Pero veamos como funciona.
Las propiedades mas importantes son:
- TVStyle. Le indicamos el estilo de presentación del TreeView, tiene 7 opciones, pero lo mas lógica es la 6, ya que aparecen un [+] [-] para indicar si está desplegado el nivel o no.
- TVLineStyle. Indicamos si queremos la representación gráfica de la jerarquía desde el nivel primario o directamente del siguiente.
- Indentation. Distancia de separación de los elementos.
- PathSeparator. Será el separador que utilizará cuando queramos recuperar la ruta completa de un elemento seleccionado.
- ImageList. Para incluir los iconos que pueden acompañar a los elementos.
- Sorted. Para presentar los elementos clasificados.
- LabelEdit. Si queremos que los elementos sean editables, es decir que los podamos modificar.
- HideSelection. Para ocultar el efecto de selección.
- Resto de propiedades propias de PowerCobol, colores, letras, nombre, etc ...
En cuanto a los métodos, son los siguientes:
- Add. Añadir un elemento primario, un padre o un hijo.
- Insert. Insertar un elemento primario, un padre o un hijo.
- Delete. Borrar un elemento primario, un padre o un hijo.
- Clear. Borrar todos los elementos y dejar el control vacio.
Vamos a cargar una lista con 3 niveles de profundidad, es decir primarios, padres e hijos. En el ejemplo lo cargamos de una tabla, pero evidentemente los datos los podeis cargar de cualquier fichero. Empezamos a definir las variables que vamos a necesitar:
01 ELNODO OBJECT REFERENCE POW-CNODE.
01 I PIC 9.
01 J PIC 9.
01 K PIC 9.
01 ELNODO1 PIC S9(9) COMP-5.
01 ELNODO2 PIC S9(9) COMP-5.
01 ELNODO3 PIC S9(9) COMP-5.
01 TABLAUNO.
02 FILLER PIC X(40) VALUE 'NIVEL1-1 NIVEL1-2 NIVEL1-3 NIVEL1-4 '.
01 RTABLAUNO REDEFINES TABLAUNO.
02 ELEUNO PIC X(10) OCCURS 10 TIMES.
01 TABLADOS.
02 FILLER PIC X(40) VALUE 'NIVEL2-1 NIVEL2-2 NIVEL2-3 NIVEL2-4 '.
01 RTABLADOS REDEFINES TABLADOS.
02 ELEDOS PIC X(10) OCCURS 4 TIMES.
01 TABLATRES.
02 FILLER PIC X(40) VALUE 'NIVEL3-1 NIVEL3-2 NIVEL3-3 NIVEL3-4 '.
01 RTABLATRES REDEFINES TABLATRES.
02 ELETRES PIC X(10) OCCURS 4 TIMES.
Explicación de las variables:
- ELNODO.Esta variable define un objeto de tipo nodo para PowerCobol.
- I, J, K.Variables para hacer los PERFORM y cargar las tablas.
- ELNODO1, ELNODO2, ELNODO3.Guardaremos los punteros de cada nivel del TreeView.
- TABLAS.Las tablas con las que cargaremos el TreeView.
Antes de explicar el proceso que realizaremos veamos el resultado obtenido en esta imagen:

Todo este proceso se haya en el evento click del botón que hemos llamado Cargar TreeView, pero no os preocupeis que el proyecto completo está disponible para descargarse. Lo primero que hacemos es inicializar el control con el método clear:
INVOKE cmTreeView1 "clear"
Y a continuación mediante 3 Perform anidados rellenamos la tabla con sus elementos
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
INVOKE CMTREEVIEW1 'Add' USING ELEUNO (I) RETURNING ELNODO1
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 4
MOVE 'Root'(ELNODO1) OF CMTREEVIEW1 TO ELNODO
INVOKE ELNODO 'Add' USING ELEDOS (J) RETURNING ELNODO2
PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
MOVE 'Child'(ELNODO2) OF 'Root'(ELNODO1) OF CMTREEVIEW1 TO ELNODO
INVOKE ELNODO 'Add' USING ELETRES (K) RETURNING ELNODO3
END-PERFORM
END-PERFORM
END-PERFORM
Lo más importante a tener en cuenta en el uso de éste control son los nodos que nos va generando y su jerarquía dentro del propio control. Por eso hemos utilizado unas variables distintas para rama del árbol y luego movemos al padre o hijo dependiendo de su posición.
Es posible que sea un poco lioso, pero cuando os bajéis el proyecto y lo veais mejor, seguro que lo implementais rapidamente.
Para completar completamente el proyecto, tenemos que programar el evento Click del TreeView, que es donde se muestra que elemento está seleccionado y cual es su ruta completa partiendo del inicio del árbol. Esta es la programación de dicho evento.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 ELTEXTO PIC X(100).
01 ELNODO OBJECT REFERENCE POW-CNODE.
PROCEDURE DIVISION.
MOVE "SelNode" OF CMTreeView1 TO ELNODO
MOVE 'Text' OF ELNODO TO ELTEXTO
MOVE ELTEXTO TO CAPTION OF LTEXTO
MOVE 'Path' OF ELNODO TO ELTEXTO
MOVE ELTEXTO TO CAPTION OF LRUTA
Hasta aquí la explicación del control TreeView, espero que os haya gustado y sobre todo que lo hayais comprendido. En la sección de descargas encontrareis la correspondiente a este artículo en el apartado PowerCobol-5.
|
|