Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Level máximo de un TreeNode (https://www.clubdelphi.com/foros/showthread.php?t=64899)

vejerf 09-11-2009 18:07:17

Level máximo de un TreeNode
 
Buenas tardes,

Necesitaría alguna forma de calcular el nivel máximo que tiene un TreeNode. Todo surge porque necesito hacer una estructura jerárquica de máximo 4 niveles. Estos niveles se pueden mover de una rama a otra siempre con la restricción esta de los 4 niveles. El problema lo tengo en este caso que no sé calcular el nivel de ese subárbol que quiero mover porque posiblemente pueda tener a su vez más ramas.

Espero haberme explicado.

Muchas gracias a todos!!!

Neftali [Germán.Estévez] 10-11-2009 11:40:56

Cada TTreeNode tiene la propiedad Level; Revísala a ver si te da lo que necesitas.
En el peor de los casos tal vez deberás hacer un recorrido para quedarte con la más grande.

vejerf 10-11-2009 17:51:21

Hola Neftali,

Muchas gracias por tu respuesta. La verdad es que la propiedad esa ya la conocía y lo que me proporciona es el nivel de un nodo. Yo lo que necesitaba saber es es el máximo nivel de un árbol o subárbol. Podría recorrerlo entero y quedarme con el máximo, pero preguntaba por si hubiese alguna propiedad directa que me lo diera.

Gracias por tu aportación Neftali!

Caro 10-11-2009 18:28:46

Cita:

Empezado por vejerf (Mensaje 346128)
Yo lo que necesitaba saber es es el máximo nivel de un árbol o subárbol. Podría recorrerlo entero y quedarme con el máximo, pero preguntaba por si hubiese alguna propiedad directa que me lo diera.

Hola vejerf, una propiedad directa que haga eso que yo sepa no hay, debes hacer el recorrido pero no todo el arbol solo de la rama que necesites. Lo que no entiendo es si quieres el nivel del ultimo hijo o que a partir de una rama selecionada saber cuantos niveles tiene hacia abajo.

Saluditos

Caro 10-11-2009 18:40:02

Hola de nuevo, tendría que ser algo así mas o menos:

Código Delphi [-]
procedure TForm1.Nivel(Nodo: TTreeNode; var NivelMax: Integer);
var
  NodoAux: TTreeNode;
  i: Integer;
begin
  for i := 0 to Nodo.Count - 1 do
  begin
    NodoAux := Nodo.Item[i];
    if NodoAux.Level>NivelMax then
     NivelMax := NodoAux.Level;
 
    Nivel(NodoAux, NivelMax);
  end;
end;
............................
 
  NivelMax : Integer;
begin
  NivelMax := -1;
  Nivel(TreeView.Selected, NivelMax);
  showmessage(IntToStr(NivelMax-TreeView.Selected.Level+1));

Si no es eso, explica un poco mas.

Saluditos

maeyanes 10-11-2009 19:29:17

Hola...

Puedes obtener el máximo level al momento de ir llenando el TreeList:

Código Delphi [-]
var
  MaxLevel: Integer;

begin
  // Cuando creas la forma donde está el TreeList
  MaxLevel := 0;
  // En donde agregas los nodos o un nodo nuevo:
  ANode := TreeList1.Items.AddChild(Parent, 'Texto');
  if MaxNode < ANode.Level then
    MaxNode := ANode.Level;
end;

De esta forma obtendrás el nivel máximo cada que agregues un nodo nuevo...


Saludos...

vejerf 16-11-2009 12:36:56

Muchas gracias por vuestras respuestas, pero no es exactamente lo que busco por la forma de proceder.

Me explico un poco. Digamos que intento repartir una serie de recursos para ciertas actividades. Estas actividades serían los nodos principales de un TTreeView. Estos nodos los voy llenando con los recursos con la restricción de que el máximo nivel es 4 como ya he comentado.

Supongamos que finaliza una actividad y que estos recursos asociados los quiero distribuir en otra actividad guardando la jerarquía. Pues bien, lo que quiero es poder determinar en runtime si puedo moverlos a otra actividad porque me cumplan el requisito jerárquico.

En definitiva, lo que yo quiero no es determinar el nivel máximo del TreeView principal, sino de cualquiera del subárbol visto desde el nodo seleccionado (ufff).

Espero haberme explicado :D...

Gracias!!!

Caro 16-11-2009 17:12:49

Cita:

Empezado por vejerf (Mensaje 346639)
.............., sino de cualquiera del subárbol visto desde el nodo seleccionado.

Hola verjer, lo que explicas es lo que hace el codigo que te pase arriba, nos da el numero de niveles que tiene cualquier subarbol que selecciones.

Saluditos

vejerf 19-11-2009 13:13:44

Perdón
 
Hola de nuevo,

Caro tienes razón que el código que me diste hacía lo que yo pedía. La verdad es que lo vi la primera vez y me despistó un poco. Pero ya una vez probado vi que hacía lo que yo quería y ya adaptado a mi código funciona estupendamente.

Muchas gracias!!!


La franja horaria es GMT +2. Ahora son las 14:01:50.

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