Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Comportamiento extraño de TVirtualStringTree (2) (https://www.clubdelphi.com/foros/showthread.php?t=95955)

Angel.Matilla 17-11-2022 12:20:01

Cita:

Empezado por Casimiro Notevi (Mensaje 549249)
Pero si en un proyecto nuevo funciona bien, dijiste.
Quita el componente, pon otro nuevo.
Mira si tienes algún evento que cambie el estado de ese nodo cuando estás borrando el otro nodo.

No hay ningún evento ni otra parte del código que modifique el estado del nodo. Lo que ya me tiene completamente perplejo es que si selecciono ese primer nodo que ponía en la imagen del principio y pulso el botón, quita el estado y no hace nada; sin salir del formulario vuelvo a seleccionar el mismo nodo u otro distinto y pulso el botón y esta vez si ejecuta el código asociado. Cada vez lo entiendo menos. :(

Angel.Matilla 21-11-2022 11:29:23

Después de darle muchas vueltas y hacer un montón de pruebas, esta mañana me ha venido una idea a la cabeza: dado que el VST tiene activadas las casillas de selección, daba la impresión que al empezar a recorrer el árbol se inicializan los nodos. He hecho varias pruebas con el código así:
Código:

Lista->OnInitNode = NULL;    // Añadida para que no inicialice los nodos
Nodo = Lista->GetFirst();
while (Nodo != NULL)
{
    if (!Lista->HasChildren[Nodo] && Lista->CheckState[Nodo] > csUncheckedPressed)
    {
          try
          {
              fMenu->Query->Close();
              fMenu->Query->ParamByName("PrvIns")->AsString = PrvIns;
              fMenu->Query->ParamByName("RefInt")->AsString = ((PTreeSelRec)Lista->GetNodeData(Nodo))->RefInt;
              fMenu->Query->ParamByName("Forma")->AsInteger = ((PTreeSelRec)Lista->GetNodeData(Nodo))->ForPago;
              fMenu->Query->ParamByName("Junta")->AsInteger = StrToInt(((PTreeSelRec)Lista->GetNodeData(Nodo))->Concepto);
              fMenu->Query->ExecSQL();
              nRecibos += fMenu->Query->RowsAffected;
              fMenu->Query->Transaction->Commit();
          }
          catch(...)
          {
              Screen->Cursor = crArrow;
              fMenu->Query->Transaction->Rollback();
              Application->ProcessMessages();
              return;
          }
    }
    Nodo = Lista->GetNext(Nodo);
}
Lista->OnInitNode = ListaInitNode;    // Añadida para restaurar la acción al volver a cargar

y parece que va bien.


La franja horaria es GMT +2. Ahora son las 05:54:11.

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