Código fuente de clasificación de árboles
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
<; p>BtnMakeTree: TButton;BtnAddChildNode: TButton;
BtnAddNode: TButton
btndelettree: TButton
BTN buscar: TButton; ;
EdFindText: TEdit;
dbgrid 1: TDBGrid;
dbnavigator 1: navegador TDB;
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: al objeto);
Procesar BtnDeleteTreeClick (remitente: al objeto);
Procesar DBGrid1MouseUp (enviar Square: botón TObject); TMouseButton
shift: TShiftState; x, Y: integer);
Proceso TreeView1Change (remitente: TObjectnode: TTreeNode);
Proceso treeview 1 editado (remitente: TObject nodo: TTreeNode
var S: String);
Proceso BtnFindClick (remitente: al objeto);
Privado
{Privado Declaración}
Pública
{Declaración Pública}
{******** ************* ************************************} p>
{ }
{ DbTreeView v1.0 }
{ }
{Copyright 2006.8 (Shao Deliang) DLS}
{ }
{****************************************** ******* **********}
//======================= ======= =========================================== ===== p>
//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 Table, a. Método de programación utilizando 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 del 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 usado
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; : 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: El contenido del nodo en el árbol ha sido modificado. 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 de á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 del árbol usando: qué buscar.
Valor de retorno: Verdadero: encontrado Falso: no encontrado.
- }
Buscar árbol de funciones(TreeView: TTreeView; texto: cadena): booleano
Fin
Definir variables
formsdltree: TFormsdltree;
list: TStringList; // Se utiliza para registrar cada identificación 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
Uso de 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);
Inicio
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. Cuente lt1 y luego 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 = 0 entonces {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: inge;
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, vista de árbol, verdadero);
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 secuencia 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 variable
Í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 variable
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 do
Inicio
Activo si está activo: = False
Nombre del proveedor: = 'DSP_City_Infor';
Abrir;
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: Integer);
Inicio
treeselect(dm.ClientDataSet1, vista de árbol 1);
Fin;
Proceso TFormsdltree. TreeView1Change(Remitente: TObjectnode: TTreeNode);
Inicio
treechange(dm.ClientDataSet1, nodo
Fin
Proceso; TFormsdltree.
vista de árbol 1 editada (Remitente: TObject Node: 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.