Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Arrastrar y soltar en un TreeView (https://www.clubdelphi.com/foros/showthread.php?t=28080)

Gabriel2 08-12-2005 13:08:22

Arrastrar y soltar en un TreeView
 
Hola compañeros del foro.

Utilizo Delphi 7. Mi ide es poder mover los nodos en un TreeView de una rama a otra. Su estructura es de varias ramas con 4 o 5 niveles. Busque en el foro y encontre código para poder realizarlo. He probado y no consigo hacerlo.

Código:

procedure TForm1.MenusDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  AnItem: TTreeNode;
  AttachMode: TNodeAttachMode;
  HT: THitTests;
begin
  if Menus.Selected = nil then Exit;
  HT := Menus.GetHitTestInfoAt(X, Y) ;
  AnItem := Menus.GetNodeAt(X, Y) ;
  if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent]<> HT) then
  begin
        if (htOnItem in HT) or (htOnIcon in HT) then AttachMode := naAddChild
  else if htNowhere in HT then AttachMode := naAdd
  else if htOnIndent in HT then
        AttachMode := naInsert;
        Menus.Selected.MoveTo(AnItem, AttachMode) ;
  end;
end;

Esta es la pagina en donde esta el código.

Saludos. Gracias...

Caro 08-12-2005 14:29:48

1 Archivos Adjunto(s)
Hola Gabriel2 aqui te pongo un ejemplo espero te sirva.

Gabriel2 09-12-2005 12:51:54

Gracias y una consultita màs sobre TreeView
 
Primero que todo gracias...

Lo que necesito es armar un arbol con datos de una DB. De que forma lo podría armar. Por ejemplo: Tengo el registro 1000 de nivel 0 que es el que inicia el arbol, dentro de este se encuentra el registro 1100 y 1200 que son ramas del 1000 y son de nivel 1, dentro de 1100 se encuentra 1110 de nive 2 que es una rama de 1100...

En forma más gráfica:

Nivel-0 Nivel-1 Nivel-2

1000......--->....1100.....--->......1110
.
...--->....1200

2000......--->....2100.....--->......2110
.
...--->....2200.....--->......2210

Qué datos guardarías en una DB para luego crear los Nodos y cómo los crearías?

Caro 09-12-2005 13:57:03

Hola
Los campos que yo tendria en mi BD serian codigo, descripcion, nivel de tipo string, puedes tener otros mas pero esos me parecen los que te armarian el arbol.

Lo que se me ocurre que puede ser que no sea lo mejor pero aqui te lo pongo, alguien que encuentre una solución mejor supongo que te respondera tambien.

Crear un archivo con tabulaciones en base al nivel osea:
nivel 1 -> ninguna tabulacion
nivel 2 -> 1 tabulacion
nivel 3 -> 2 tabulaciones
y asi sucesivamente porque tu arbol puede tener n niveles


Código Delphi [-]
var
archivo:TextFile;
begin
ruta:=ExtractFileDir(Application.ExeName) + '\' + 'arch.txt';
ASSIGNFILE(archivo,ruta);
ReWrite(Archivo);
 
sql:='SELECT codigo, descripcion, nivel FROM tabla ORDER BY codigo';
//pones todo lo demas para ejecutar la consulta
 
qry.First;
while not(qry.Eof) do
begin
codigo:=qry.Fields[0].AsString;
descripcion:=qry.Fields[1].AsString;
nivel:=qry.Fields[2].AsString;
 
//lo que aparecera en tu arbol sera la descripcion con esta linea 
//te lo ira poniendo las tabulaciones segun el nivel 
descripcion_fin:=StringofChar(#32,strtoint(nivel)-1)+descripcion;
WriteLn(Archivo,descripcion_fin);
qry.Next;
end;

con eso tendrias tu archivo creado con tabulaciones y todo ahora seria cargarlo dentro del arbol que seria de esta forma

Código Delphi [-]
TreeView.LoadFromFile(ExtractFilePath(Application.ExeName)+'arch.txt');

conste suponiendo que estamos manteniendo la codificación del codigo que pusiste y que seria de tipo string para que te lo ordene de la forma que tu quieres, otra forma seria hacerlo recursivo pero nose como, eso seria espero te sirva chausito.


La franja horaria es GMT +2. Ahora son las 22:05:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi