Código fuente de selección de árbol
Unidad sdlformtree
Conexión
Uso
Ventana, mensaje, sistema, variable, clase, gráficos, control, formulario, p>
p>
Diálogo, Cuadrícula, Cuadrícula de base de datos, StdCtrls, ExtCtrls, ComCtrls, DBClient, DBCtrls.
Tipo
TFormsdltree = clase(TForm)
vista de árbol 1:TTreeView;
panel 14:TPanel;
BtnMakeTree:TButton;
BtnAddChildNode:TButton;
BtnAddNode:TButton;
btndelettree:TButton;
BTN buscar:TButton ;
EdFindText:TEdit;
dbgrid 1:TDBGrid;
dbnavigator 1:TDB navigator;
Procesar BtnMakeTreeClick (remitente: a objeto);
formulario de procedimiento crear(Remitente:al objeto);
Programa FormDestroy(remitente:al objeto);
Proceso BtnAddNodeClick(remitente:al objeto) );
Procesar BtnAddChildNodeClick(remitente:a objeto);
Procesar BtnDeleteTreeClick(remitente:a objeto);
Procesar DBGrid1MouseUp(enviar Square: Abotón de objeto: TMouseButton
shift: TShiftState; x, Y: integer);
Proceso TreeView1Change (remitente: TObjectnode:TTreeNode);
La vista de árbol del proceso 1 ha sido editada ( remitente: TObject nodo: TTreeNode
var S: String);
Procesar BtnFindClick (remitente: al objeto);
Privado
{Declaración Privada}
Pública
{Declaración Pública}
{******** *********** **************************************} p>
{ } p>
{ DbTreeView v1.0 }
{ }
{Copyright 2006.8 (Shao Deliang) DLS}
{ }
{****************************************** ***** ************}
//======================= ===== ============================================== =====
//Este módulo implementa la asociación entre TreeView y los datos. Sus requisitos son los siguientes:
//
//Aquí se utiliza la base de datos Interbase. , un método de programación que utiliza tecnología de tres capas. Los campos de la tabla deben ser
//incluidos id, ID, pid y caption.
// id: campo de incremento automático, utilizado para representar el número de nodo.
// caption: Se utiliza para indicar el contenido que se mostrará en el árbol.
// pid: se utiliza para representar el nodo padre del nodo actual.
//En esta zona urbana, existen city_infor_ID, city_infor_Name, City_Infor_Privacy_ID.
//Tres campos.
//========================================== = =====================================
{ -
Nombre del proceso: Spanning Tree
Descripción: Crear un árbol
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetro: nombre del conjunto de datos del cliente: cadena; TreeView: TTreeView
Descripción del parámetro: ClientDataSetName: el nombre del conjunto de datos del cliente correspondiente. TreeView: el árbol utilizado
Valor de retorno: Ninguno
p>- }
Proceso crear árbol(nombre del conjunto de datos del cliente:cadena;TreeView:TTreeView);
{ -
Nombre del proceso :AddNode
Descripción: Agrega un nodo al árbol.
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente:TClientDataSet; TreeView: TTreeView
Descripción del parámetro: ClientDataSet: conjunto de datos del cliente asociado; TreeView: árbol usado
Valor de retorno: Ninguno
- }
Proceso de agregar nodo (conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView );
{ -
Nombre del proceso: AddChildNode
Descripción: Agrega un nodo hijo del árbol.
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente:TClientDataSet; TreeView: TTreeView
Descripción del parámetro: ClientDataSet: conjunto de datos del cliente asociado; TreeView: árbol utilizado
Valor de retorno: Ninguno
- }
Proceso AddChildNode(conjunto de datos del cliente:TClientDataSet; TreeView:TTreeView);
{ -
Nombre del proceso: AddTreeNode
Descripción: Agregar nodo (proceso de uso interno)
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView;bj:Boolean=false
Descripción del parámetro: ClientDataSet: el conjunto de datos del cliente asociado; TreeView: el árbol utilizado;
Bj: ¿Quieres mover el foco al nodo actualmente seleccionado?
Valor de retorno: Ninguno
- }
Proceso AddTreeNode(conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView;bj:boolean = false);
{ -
Nombre del proceso: DelTree
Descripción: eliminar un nodo (incluida la eliminación de todos los nodos secundarios debajo del nodo).
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente:TClientDataSet; TreeView:TTreeView;
Descripción de los parámetros; : ClientDataSet: conjunto de datos del cliente asociado; TreeView: árbol utilizado
Valor de retorno: Ninguno
- }
Proceso del árbol (conjunto de datos del cliente: TClientDataSet;TreeView: TTreeView);
{ -
Nombre del proceso: Treechange
Descripción: Seleccione un nodo en el árbol y mueva el cursor de la base de datos al seleccionado en el registro correspondiente. al nodo.
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente:TClientDataSet; nodo: TTreenode
Descripción del parámetro: ClientDataSet: conjunto de datos del cliente asociado; TreeView: árbol usado
Valor de retorno: Ninguno
- }
Cambio del árbol de proceso (conjunto de datos del cliente: TClientDataSet; nodo:TTreenode) );
{ -
Nombre del proceso: Treeedit
Descripción: Se ha modificado el contenido del nodo en el árbol. Actualice el contenido modificado nuevamente a la base de datos.
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente: TClientDataSet; texto: cadena
Descripción de los parámetros: ClientDataSet: base de datos asociada; texto: cadena
Valor de retorno: Ninguno
- }
Edición del árbol de procesos (conjunto de datos del cliente: TClientDataSet; texto: cadena de caracteres);
{ -
Nombre del proceso: treeelect
Descripción: El cursor en la base de datos se ha movido. Mueva el foco al nodo correspondiente en el árbol.
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: conjunto de datos del cliente:TClientDataSet; TreeView: TTreeView
Descripción del parámetro: conjunto de datos del cliente:TClientDataSet; árbol utilizado
Valor de retorno: Ninguno
- }
Selección del árbol de proceso (conjunto de datos del cliente:TClientDataSet; TreeView:TTreeView ); p>
{ -
Nombre de la función: TreeFind
Descripción: busque el contenido dado, mueva el cursor en la base de datos y mueva el foco al nodo correspondiente en el árbol .
Autor: DLS
Fecha: 19 de agosto de 2006
Parámetros: TreeView: TTreeView; texto: cadena
Descripción del parámetro:TreeView :El texto utilizado por el árbol: qué buscar.
Valor de retorno: Verdadero: encontrado Falso: no encontrado.
- }
Buscar árbol de funciones(TreeView:TTreeView; text:string):boolean
Fin
Definir variables
formsdltree:TFormsdltree;
list:TStringList; //Se utiliza para registrar cada ID y su nodo correspondiente en el árbol para lograr una búsqueda rápida.
serial_number: integer; //Se utiliza para registrar etiquetas de identificación
Rendimiento
Usa dmpas
{$R *. dfm}
Procesar TFormsdltree. BtnMakeTreeClick(Remitente: al objeto);
Inicio
MakeTree(dm.ClientDataSet1.ProviderName, vista de árbol 1);
Fin;
Procesar TFormsdltree. make tree(nombre del conjunto de datos del cliente:string;TreeView:TTreeView);
Iniciar
Vista de árbol. Artículos .ComenzarActualización
Lista. Borrar;
vista de árbol. elementos. borrar;
//Vista de árbol. cosa. Borrar;
//Lista. Borrar;
Lista. Ordenado:= Verdadero
Usar dm. ClientDataSet1
Iniciar
Primero;
En lugar de Eof
Iniciar
addtreenode(dm.ClientDataSet1, TreeView); //Agrega todos los nodos en secuencia.
Siguiente;
Fin;
Fin
Vista de árbol. Project.EndUpdate
Si la vista de árbol. Elementos. & lt1Luego salga;
Vista de árbol. Seleccionar(TreeView.items.Item[0]);
TreeView. SetFocus
Fin;
Procesar tformsdltree.addtreenode(conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView;bj:boolean = false);
Definir variables
Exponente: entero;
Nodo: TTreeNode
Inicio
Ifclientdataset. campo por nombre ('city_infor_privacy_id'). asinteger = 0luego {parentid = 0, nodo de nivel superior}
Nodo:= TreeView. Items.AddChildObject(nil,
Conjunto de datos del cliente. FieldByName('Nombre de información de la ciudad'). AsString, ClientDataSet. GetBookmark)
//Agrega un nodo y corresponde al nodo The Los datos de la etiqueta de registro se colocan en los datos adicionales proporcionados por el nodo.
Otro
Inicio
Índice:=Lista. IndexOf(ClientDataSet.field by name('City_Infor_Privence_ID').AsString);
Nodo:= TreeView. items.AddChildObjectFirst(TTreeNode(List.Object[index]),
Conjunto de datos del cliente.FieldByName('Nombre de información de la ciudad').AsString, ClientDataSet.get bookmark);
/ /Agregue un nodo secundario y coloque los datos de la etiqueta de registro correspondientes al nodo en los datos adicionales proporcionados por el nodo.
Fin;
//Agregue la información del nodo actual a la lista para encontrar rápidamente los nodos en la lista.
Lista.
AddObject(ClientDataSet.FieldByName('City_Infor_ID ').AsString, Node);
Si bj entonces
Iniciar
Vista de árbol. Seleccionar(nodo);
Vista de árbol. SetFocus
Fin;
Fin;
Proceso tformsdltree.del árbol(conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView);
Definición Variable
Nodo: TTreenode
//Eliminar todos los nodos bajo el nodo actualmente seleccionado (no eliminar el nodo actualmente seleccionado)
Procesar delnode (nodo: TTreenode ) ;
Definir variables
I: entero;
nodo secundario:TTreenode;
Inicio
Para i := 0 al nodo. Recuento - 1 hacer
Inicio
childnode := node. Item[I]; //Obtener todos los nodos bajo el nodo actual.
Conjunto de datos del cliente. GotoBookmark(childnode.data); //Mover al registro correspondiente al nodo.
Lista. Delete(List.IndexOf(ClientDataSet.FieldByName('City_Infor_ID ').AsString)); //Eliminar los datos de la lista
Client DataSet. Eliminar; //Eliminar el registro correspondiente.
si nodo. tiene hijos entonces delnode(child node); //Si hay nodos hijos, se realizará la recursividad hasta que se eliminen todos los datos.
Fin;
Fin;
{Otro método:
Usar recursividad:
Proceso de búsqueda( TN:TTreeNode);
var i:English;
Inicio
Si tn. Tener hijos
Empezar
Para i := tn. cuenta-1 regresiva hasta 0 hacer búsqueda(TN[I]);
Fin
Otros
Inicio
//Lo siguiente son Cosas que debes hacer para cada ahorro de energía.
Fin;
Fin;}
Inicio
Nodo:= vista de árbol. está seleccionado;
Si nodo = nil, salga;
//Eliminar todos los nodos bajo el nodo actualmente seleccionado (no eliminar el nodo actualmente seleccionado)
delnode(nodo);
//Eliminar el nodo seleccionado actualmente.
Conjunto de datos del cliente. GotoBookmark(node.data);
Lista. Eliminar(List.IndexOf(ClientDataSet.FieldByName('City_Infor_ID ').AsString));
ClientDataSet. Eliminar;
Nodo. Eliminar;
Vista de árbol. SetFocus
Fin;
Procedimiento TFormsdltree. AddChildNode(conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView);
Definir variables
id: entero;
Inicio
id:= Conjunto de datos del cliente. FieldByName('Ciudad_Infor_ID '). AsInteger // Recuerda el número de nodo actual como el nodo padre del nodo hijo.
Conjunto de datos del cliente.
Anexar;
Conjunto de datos del cliente. campo por nombre('Ciudad_Infor_Privence_ID'). as integer:= id; //El número de nodo principal del nodo secundario recién agregado es id.
Conjunto de datos del cliente. fieldbyname('nombre de información de la ciudad'). asstring: = 'nuevo nodo hijo';
Número de serie: = número de secuencia + 1
Conjunto de datos del cliente. FieldByName('Ciudad_Infor_ID '). como entero:= número de serie;
ClientDataSet.post
addtreenode(ClientDataSet, treeview, true);
Fin;
ProcedimientoTFormsdltree. agregar nodo(conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView);
Definir variables
id actual: entero;
Inicio
Currentid := Conjunto de datos del cliente. FieldByName('Ciudad_Infor_ID '). AsInteger//Recuerda el número de nodo del nodo actual
Conjunto de datos del cliente. Anexar;
Conjunto de datos del cliente. campo por nombre('Ciudad_Infor_Privence_ID'). as integer:= Currentid; //El número de nodo principal del nodo secundario recién agregado es Currentid.
Conjunto de datos del cliente. fieldbyname('nombre de información de la ciudad'). asstring:= ' nuevo nodo ';
Número de serie:=número de serie+1;
Conjunto de datos del cliente. FieldByName('Ciudad_Infor_ID '). as integer:= serial_number;
Conjunto de datos del cliente. Publicar;
addtreenode(ClientDataSet, treeview, true);
Fin;
Procedimiento TFormsdltree. cambio de árbol(conjunto de datos del cliente:TClientDataSet; nodo:TTreenode);
Iniciar
Conjunto de datos del cliente. GotoBookmark(node.data);
Fin;
Procesar TFormsdltree. edición de árbol (conjunto de datos del cliente: conjunto de datos tclient; texto: cadena);
Inicio
Conjunto de datos del cliente. Editar;
Conjunto de datos del cliente. FieldByName('nombre de información de la ciudad'). cadena de culo: = texto;
ClientDataSet.post
Fin;
Proceso tformsdltree.treeselect(conjunto de datos del cliente:TClientDataSet;TreeView:TTreeView);
Definir variables
Índice: entero;
Nodo: TTreeNode
Inicio
Índice:= lista. IndexOf(ClientDataSet.FieldByName('City_Infor_ID ').AsString);
Nodo := TTreeNode(List.objects[Index]);
Vista de árbol.
Seleccionado:=Nodo;
Vista de árbol. SetFocus
Fin;
Función TFormsdltree. búsqueda de árbol (TreeView:TTreeView; texto: cadena): booleano;
Definir variables
I: entero
Inicio
Resultado; :=false;
para i := 0 a la vista de árbol. Items.Count - 1 hacer
Iniciar
si la vista de árbol. proyecto.proyecto[i]. text=textluego
Iniciar
TreeView. Seleccionar(TreeView.items.Item[I]);
TreeView. SetFocus
Resultado:=Verdadero;
Salir;
Fin;
Fin;
Fin;
Procesar TFormsdltree. FormCreate(remitente:al objeto);
Inicio
lista:=TStringList. Crear;
Usar dm. ClientDataSet1 hacer
Inicio
Si está activo, entonces activo:= False
Nombre del proveedor:= 'DSP_City_Infor';
Abrir; p>
Final;
Número de serie:=dm. Conjunto de datos del cliente1. Valor de campo ['Ciudad_Infor_ID'];
Fin
Fin
Procedimiento TFormsdltree. FormDestroy(remitente:al objeto);
Inicio
Lista. Gratis;
dm. Conjunto de datos del cliente1. aplicar actualizaciones(-1); //Cambiar conjunto de datos de usuario
Fin;
Procesar TFormsdltree. BtnAddNodeClick(remitente: al objeto);
Inicio
addnode(dm.ClientDataSet1, vista de árbol 1);
Fin;
ProcedimientoTFormsdltree . BtnAddChildNodeClick(remitente: al objeto);
Inicio
addchildnode(dm.ClientDataSet1, vista de árbol 1);
Fin;
ProcedimientoTFormsdltree . BtnDeleteTreeClick(remitente:al objeto);
Inicio
eliminar(dm.ClientDataSet1, vista de árbol 1);
Fin;
Proceso TFormsdltree. DBGrid1MouseUp(Remitente: TObject
Botón:TMouseButtonshift:TShiftState; x, Y: entero);
Inicio
treeselect(dm.ClientDataSet1, vista de árbol 1);
Fin;
Proceso TFormsdltree. TreeView1Change(Sender:TObjectnode:TTreeNode);
Inicio
treechange(dm.ClientDataSet1, nodo);
Fin;
Proceso TFormsdltree.
vista de árbol 1 editada (remitente: nodo TObject: TTreeNode
var S: String
Inicio
treeedit(dm.ClientDataSet1, s); >
Fin;
Proceso TFormsdltree. BtnFindClick(remitente: al objeto);
Inicio
Si no es TreeFind(treeview1, edFindText. text) entonces
MessageBox(0, 'No encontrado', 'información',MB_ok);
Fin;
Fin.