Ver Mensaje Individual
  #9  
Antiguo 09-08-2008
FerCastro FerCastro is offline
Miembro
 
Registrado: abr 2006
Posts: 97
Reputación: 19
FerCastro Va por buen camino
Recursividad en el tree

- Aclaro, cuando creo el árbol identifico los empleados con ':.' al inicio del nombre, se que es no es una solución muy ortodoxa, y si alguien tiene una mejor le agradeceré me la haga saber.

No pongo el código de cuando mando el empleado a una tabla virtual y al grid, pues esto solo aplica a mi programa.

Si alguien quiere que le amplíe la explicación, o si alguien simplifica el código con todo gusto las sugerencias y preguntas son bienvenidas. Está comentado pero pudierab haber omitido algunos detalles.

Saludos!!


FCG




Código Delphi [-]



// la función recibe como parametro un nodo, que inicialmente es el nodo elegido al principio.

function TFReporte.TomaNodos(oNodo:TTreeNode): integer;
var
  nCiclo: Integer;
  cNombre: string;
  nPos: Integer;
  oNodoHijo : TTreeNode;
  nLargo: Integer;
  bEncuentra: Boolean;
  Begin

    // con este ciclo for recorremos todos los elementos del nodo que entra como parámetro
    for nCiclo := 0 to oNodo.Count - 1 do
      Begin
            // tomamos el nodo que corresponde a la posición que indica el ciclo
            oNodoHijo := oNodo.Item[nCiclo];

            // Vamos a verificar si el nodo elegido es empleado
            cNombre := oNodoHijo.Text;
            nPos:=Pos(':.',cNombre);

            // Si el nodo es un empleado, o para cualquier ejemplo práctico, si no es nodo padre dentro de un nodo padre
            if nPos > 0 then
              Begin

                // Mandar el empleado al grid


                  end;
              End
            // De lo contrario el nodo es un departamento, o es un nodo padre dentro de un nodo padre
            Else
              Begin
                 // La función se llama así misma con un nuevo parámetro, ahora el nuevo nodo que puede contener hijos dentro de otro nodo.
                 TomaNodos(oNodoHijo);
              End ;

      End;

  End;

Última edición por FerCastro fecha: 09-08-2008 a las 18:31:13. Razón: Me faltó explicar algunas cosas
Responder Con Cita