Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   TreeView... Como hago esto? (https://www.clubdelphi.com/foros/showthread.php?t=46698)

b3nshi 07-08-2007 01:35:42

TreeView... Como hago esto?
 
Les explico, tengo un tree view con estos items...

lunes
>>|mañana
>>>>>|actividad
>>|tarde
>>>>>|actividad
martes
>>|mañana
>>>>>|actividad1
>>>>>|actividad2
>>>>>|actividad3
>>|tarde
>>>>>|actividad
miercoles
>>|mañana
>>>>>|actividad1
>>>>>|actividad2
>>|tarde
>>>>>|actividad1
>>>>>|actividad2
>>>>>|actividad3
>>>>>|actividad4

Siendo actividad los items q pueden variar... o sea... pueden haber una o varias actividades...

Y bueno lo q estoy intentando hacer es guardarlas en un archivo xml...
el problema surge cuando tengo q reccorrer los items y subitems... lo estoy haciendo de la siguiente manera:
Código Delphi [-]
for i:= 0 to treeview1.items.count do //Para recorrer los dias
 begin 
    for j:= 0 to treeview1.items[i].items.count do //Para ver si es mañana o tarde
     begin
         for y := 0 to treeview1.items[i].items[j].items.count do //Recorro las actividades
              begin
 
              end;
     end;
 end;

Pero resulta q haciendo de esta forma nunca llega a recorrer los otros dias... o sea... no llega al martes ni nada de eso por lo q supongo q estoy moviendome mal entre los items y subitems...

Alguien sabe como puedo moverme en el treeview? Es decir como deberian ser los "for"

Desde ya muchas gracias

{Saludos}

Caro 07-08-2007 04:38:19

Hola, yo recorro con un solo for, y segun alguna condición hago lo que necesito.

Código Delphi [-]
 for Ind:=0 to TreeView1.Items.Count-1 do
 begin
  case TreeView1.Items[Ind].Level of
  0://Nivel 0 (Dias)
  1://Nivel 1 (Turno)
  2://Nivel 2 (Actividades)
  end;
 end;


Saluditos, espero te sirva

roman 07-08-2007 06:30:32

Hola,

El método que describe Caro puede ser más que suficiente y es muy sencillo. Aún así, dado que un archivo XML también es jerárquico, pudiera ser que te convenga más recorrer el árbol recursivamente:

1. Lees los nodos de primer nivel (días)
2. Por cada día, lees sus subnodos (turnos)
3. Por cada turno, lees sus subnodos (actividades)

Más o menos sería así:

Código Delphi [-]
var
  NodoDia: TTreeNode;

begin
  // Te colocas en el primer nodo del árbol
  NodoDia := TreeView1.Items.GetFirstNode();

  // Recorres los nodos de primer nivel (días)
  while Assigned(NodoDia) do
  begin
    (*
      Aquí trabajas con este día
    *)

    // Lees los turnos de este nodo
    LeerTurnos(NodoDia);

    // Avanzas al siguiente nodo del mismo nivel (dia)
    NodoDia := NodoDia.GetNextSibling();
  end;
end;

El método LeerTurnos trabaja con los subnodos del nodo (dia) que se le pase:

Código Delphi [-]
procedure LeerTurnos(NodoDia: TTreeNode);
var
  NodoTurno: TTreeNode;

begin
  // Te colocas en el primer subnodo (turno) de este dia
  NodoTurno := NodoDia.GetFirstChild();

  // Recorres los subnodos (turnos) de NodoDia
  while Assigned(NodoTurno) do
  begin
    (*
      Aquí trabajas con este turno
    *)

    // Lees las actividades de este nodo
    LeerActividades(NodoTurno);

    // Avanzas al siguiente nodo del mismo nivel (turno)
    NodoTurno:= NodoTurno.GetNextSibling();
  end;
end;

Finalmente, el método LeerActividades, trabaja con los subnodos del nodo (turno) que se le pase:

Código Delphi [-]
procedure LeerActividades(NodoTurno: TTreeNode);
var
  NodoActividad: TTreeNode;

begin
  // Te colocas en el primer subnodo (actividad) de este turno
  NodoActividad := NodoTurno.GetFirstChild();

  // Recorres los subnodos (actividades) de NodoTurno
  while Assigned(NodoActividad) do
  begin
    (*
      Aquí trabajas con esta actividad
    *)

    // Avanzas al siguiente nodo del mismo nivel (actividad)
    NodoActividad:= NodoActividad.GetNextSibling();
  end;
end;

// Saludos

b3nshi 07-08-2007 15:53:17

Muchisimas Gracias a los dos por contestarme... en realidad creo q los dos metodos me ayudan para guardar en el archivo xml, uno con mas lineas de codigo q otro... pero en fin... muchisimas gracias a los dos... ya probé usando ambos y funcionan perfectos!...

Hasta la proxima!

{Saludos}

b3nshi 08-08-2007 18:29:17

Y ahora... una pregunta? Como hago para leer este xml?
Estuve viendo un poco de codigo pero muy claro no me queda...
No hay un items.count para los nodos dentro d un xml por loq no se como controlar esto...

Como haria para leer un archivo con la estructura como la que tengo arriba?

Muchas Gracias nuevamente!

{Saludos}


La franja horaria es GMT +2. Ahora son las 01:44:04.

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