Red de conocimiento informático - Conocimiento de la instalación - Código fuente de clasificación de árboles

Código fuente de clasificación de árboles

El siguiente es el código fuente de programación de personal treeview tree (se ha estado ejecutando en software comercial personal durante 4 años y está dedicado a jóvenes que desean aprender). Como el archivo adjunto no se puede entregar, tenemos que copiarlo de la siguiente manera (copiar la parte pública del formulario de esta unidad y utilizarla en otros formularios).

Unidad sdlformtree

Conexión

Uso

Ventana, mensaje, sistema, variable, clase, gráficos, control, formulario,

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}

{******** ************* ************************************}

{ }

{ 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 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

{ -

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.