Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Procesar VirtaulStringTree (https://www.clubdelphi.com/foros/showthread.php?t=94322)

Angel.Matilla 29-11-2019 11:32:40

Procesar VirtaulStringTree
 
Sigo a vueltas con este elemento. Me parece estupendo, pero me está costando verdaderos sudores trabajar con él. Siguiendo con el mismo "bicho" de mi anterior hilo, tengo este árbol:

Para procesar los nodos seleccionados uso este código para rellenar un TListView de otro formulario:
Código:

TListItem *pItem;
PVirtualNode Nodo1, Nodo2;
Nodo1 = Mesas->GetFirst();
while (Nodo1 != NULL)
{
    if (Mesas->CheckState[Nodo1] > csUncheckedPressed)
    {
          Nodo2 = Mesas->GetNext(Nodo1);
          while (Nodo2 != NULL && Nodo2->Parent == Nodo1)
          {
              if (Mesas->CheckState[Nodo2] > csUncheckedPressed)
              {
                    pItem = fEscrutinio->LisMesas->Items->Add();
                    pItem->Caption = ((PTreeEle)Mesas->GetNodeData(Nodo1))->Municipio;
                    pItem->SubItems->Add(((PTreeEle)Mesas->GetNodeData(Nodo2))->Municipio);
                    pItem->SubItems->Add(FormatFloat("#,###", ((PTreeEle)Mesas->GetNodeData(Nodo2))->Censo));
                    pItem->SubItems->Add(FormatFloat("#,###", ((PTreeEle)Mesas->GetNodeData(Nodo2))->Votos));
                    pItem->SubItems->Add(((PTreeEle)Mesas->GetNodeData(Nodo2))->CodMes);
              }
              Nodo2 = Mesas->GetNextSibling(Nodo2);
          }
    }
    Nodo1 = Mesas->GetNextSibling(Nodo1);
}

Tal cual está el código al pasar el primer nodo (ABENOJAR) se mete por el if, pero si el nodo no está desplegado el segundo if se lo salta, y en este caso estarían marcados todos los nodos de niveles inferiores. He intentado desplegar el nodo con Mesas->Expanded[Nodo1] = true antes de asignar Nodo2, pero al hacerlo se desmarca todo el nodo. ¿Podéis ayudarme o darme una pista de por donde debo tirar?

Casimiro Noteví 29-11-2019 22:35:40

Aquí tienes ejemplos de virtualtreeview que pueden servirte, aunque es object pascal, no c++

Angel.Matilla 02-12-2019 10:20:48

Cita:

Empezado por Casimiro Notevi (Mensaje 534629)
Aquí tienes ejemplos de virtualtreeview que pueden servirte, aunque es object pascal, no c++

Muchas gracias. Ahora mismo lo estudio.

Angel.Matilla 04-12-2019 09:44:47

Estuve viendo el código del enlace. Muy interesante. Probándolo me he dado cuenta de una cosa: una vez que el nodo se ha expandido el bucle qe puse en mi mensaje funciona a la perfección aunque luego se contraigan todos los nodos; es como si hasta que no se expande totalmente no supiera lo que hay. Lo que no encuentro es como expandir todo el árbol; sé que lo hice pero no recuerdo como.

Angel.Matilla 04-12-2019 09:59:25

¡NO HE DICHO NADA! Me estaba empeñando en poner ExpandFull cuando el procedimiento es justo al revés: FullExpand.

Casimiro Noteví 04-12-2019 10:04:23

vstArbol.FullExpand;
vstArbol.FullCollapse;

Angel.Matilla 04-12-2019 10:15:42

Cita:

Empezado por Casimiro Notevi (Mensaje 534658)
vstArbol.FullExpand;
vstArbol.FullCollapse;

Gracias. Y ya he comprobado que si una vez cargado el árbol se ejecutan ambos al procesar los nodos lo hace bien.


La franja horaria es GMT +2. Ahora son las 21:34:23.

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