Almacene más datos personalizados en el nodo del árbol en Delphi

El TTreeView Delphi El componente muestra una lista jerárquica de elementos: nodos de árbol. Un nodo se presenta por texto de nodo y una imagen opcional. Cada nodo en una vista de árbol es una instancia de una clase TTreeNode.

Si bien puede completar la vista de árbol con elementos en tiempo de diseño, utilizando el Editor de elementos de TreeView, en la mayoría de los casos, llenaría su vista de árbol en tiempo de ejecución, dependiendo de qué trata su aplicación.

El Editor de elementos de TreeView revela que solo hay un puñado de información que puede "adjuntar" a un nodo: texto y algunos índices de imágenes (para el estado normal, expandido, seleccionado y similar).

En esencia, el componente de vista de árbol es fácil de programar. Hay un par de métodos para agregar nuevos nodos al árbol y establecer su jerarquía.

Aquí se explica cómo agregar 10 nodos a la vista de árbol (denominado "TreeView1"). Tenga en cuenta que la propiedad Elementos proporciona acceso a todos los nodos del árbol. AddChild agrega un nuevo nodo a la vista de árbol. El primer parámetro es el nodo primario (para construir la jerarquía) y el segundo parámetro es el texto del nodo.

instagram viewer

AddChild devuelve el TTreeNode recién agregado. En lo anterior muestra de código, los 10 nodos se agregan como nodos raíz (no tienen nodo principal).

En situaciones más complejas, desearía que sus nodos transporten más información, preferiblemente que tengan algunos valores especiales (propiedades) que sean específicos del proyecto que está desarrollando.

Supongamos que desea mostrar los datos del artículo de pedido del cliente de su base de datos. Cada cliente puede tener más pedidos y cada pedido se compone de más artículos. Esta es una relación jerárquica que se puede mostrar en una vista de árbol:

En su base de datos habría más información para cada pedido y para cada artículo. La vista de árbol muestra el estado actual (solo lectura), y desea ver los detalles por pedido (o incluso por artículo) del pedido seleccionado.

Cuando el usuario selecciona el nodo "Pedido_1_1", desea que los detalles del pedido (suma total, fecha, etc.) se muestren al usuario.

Puede, en ese momento, obtener los datos requeridos de la base de datos, PERO necesitaría conocer el identificador único (digamos un valor entero) del orden seleccionado para obtener los datos correctos.

Necesitamos una forma de almacenar este identificador de pedido junto con el nodo, pero no podemos usar la propiedad Text. El valor personalizado que necesitamos almacenar en cada nodo es un número entero (solo un ejemplo).

Cuando ocurre tal situación, es posible que sienta la tentación de buscar la propiedad Tag (muchos componentes de Delphi sí lo tienen), pero la clase TTreeNode no expone la propiedad Tag.

Agregue datos personalizados a los nodos del árbol: el TreeNode. Propiedad de datos

La propiedad de datos de un nodo de árbol le permite asociar sus datos personalizados con un nodo de árbol. Los datos son un puntero y puede apuntar a objetos y registros. La visualización de datos XML (RSS Feed) en un TreeView muestra cómo almacenar un tipo de registro variable en la propiedad de datos de un nodo de árbol.

Muchas clases de tipo de elemento exponen la propiedad de datos; puede usarla para almacenar cualquier objeto junto con el elemento. Un ejemplo es el TListItem de un componente TListView. Aqui esta cómo agregar objetos a la propiedad de datos.

Agregue datos personalizados a los nodos del árbol: El TreeView. CreateNodeClass

Si no desea utilizar la propiedad Data del TTreeNode, sino que desea ampliar su propio TreeNode con algunas propiedades, Delphi también tiene una solución.

Digamos que quieres poder hacer

Aquí le mostramos cómo extender el TTreeNode estándar con algunas propiedades propias:

  1. Cree su TMyTreeNode extendiendo el TTreeNode.
  2. Agregue una propiedad de cadena MyProperty.
  3. Maneje OnCreateNodeClass para que se cree la vista de árbol para especificar su clase de nodo.
  4. Exponga algo como la propiedad TreeView1_SelectedNode en el nivel del formulario. Esto sería del tipo TMyTreeNode.
  5. Maneje OnChange de la vista de árbol para escribir en SelectedNode el valor del nodo seleccionado.
  6. Use TreeView1_Selected.myProperty para leer o escribir un nuevo valor personalizado.

Aquí está el código fuente completo (TButton: "Button1" y TTreeView: "TreeView1" en un formulario):

Esta vez no se usa la propiedad Data de la clase TTreeNode. Más bien, extiende la clase TTreeNode para tener su propia versión de un nodo de árbol: TMyTreeNode.

Usando el evento OnCreateNodeClass de la vista de árbol, crea un nodo de su clase personalizada en lugar de la clase TTreenode estándar.

instagram story viewer