Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Claro, por eso voy avanzando por el árbol. Al llegar a un nodo que no tiene hijos y está seleccionado es cuando ejecuto el query, pero es que cuando llega a ese nodo sin hijos no sé por qué quita la marca de selección sin que yo se lo indique. Es lo que no entiendo.
Responder Con Cita
  #2  
Antiguo 09-11-2022
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Creo que estás diciendo que borras primero "Ordinario", luego "Desconocida" y finalmente "Tomelloso", que no puedes borrarlo.
Y lo que comento es que deberías, creo, borrar en orden inverso, primero "Tomelloso", luego "Desconocida" y finalmente "Ordinario".
Si es que he entendido bien.
Responder Con Cita
  #3  
Antiguo 09-11-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
No. Siento haberme explicado mal. En cada nodo final (Tomelloso en este caso) están todos los valores: fecha, tipo de emisión (Ordinario), forma de pago (Desconocida) y código de la población (Junta). Por eso voy buscando los nodos que no tiene hijos porque sé que en ellos están todos los valores que busco; fíjate en la condición que hay dentro del bucle:
Código:
if (!Lista->HasChildren[Nodo] && Lista->CheckState[Nodo] > csUncheckedPressed)
sólo se ejecuta el query si el nodo no tiene hijos y está seleccionado. Y ese es el problema: cuando veo las propiedades HasChildren y CheckState van cumpliendo(HasChildren está a true en todos menos en ese último) y CheckState tiene un valor mayor que 1, que según la ayuda de TVirtualStringTree es una enumeración con estos valores:
Cita:
csUncheckedNormal, csUncheckedPressed, csCheckedNormal, csCheckedPressed, csMixedNormal, csMixedPressed
por lo tanto si vale 2 (csCheckedNormal) o más tiene que ejecutarse, pero cuando se encuentra que HasChildren es false automáticamente cambia el CheckState a csUncheckedNormal.
Responder Con Cita
  #4  
Antiguo 09-11-2022
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.678
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Prueba a ver:
Código Delphi [-]
if (!Lista->HasChildren[Nodo] && ((Lista->CheckState[Nodo]=csMixedNormal) or (Lista->CheckState[Nodo]=csMixedPressed))
Responder Con Cita
  #5  
Antiguo 10-11-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Gracias por la sugerencia pero no funciona.

Esto es lo que está pasando y me tiene completamente descolocado:

Como veis las tres primeras veces va tomando los valores correctos: 01/10/2022, Ordinarios, Banco (aunque ponía Desconocida este es el valor correcto). En los tres casos aparece HasChildren como true porque en los tres casos hay un hijo y CheckState como csCheckedNormal por que está seleccionado el nodo completo.

Pero en cuanto hace Lista->GetNext(Nodo) para tomar el valor TOMELLOSO, sin que el código haga nada CheckState se pone como csUncheckedNormal y, claro está, no se ejecuta el query.
Responder Con Cita
  #6  
Antiguo 10-11-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Lo curioso es lo que indicaba en otro mensaje: si dejo desplegado el nodo completo antes de empezar a recorrer el árbol si se ejecuta bien el código y esto todavía me desconcierta más.
Responder Con Cita
  #7  
Antiguo 10-11-2022
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Parece que encontré la solución. En lugar de preguntar si el nodo tiene hijos, pregunto cuantos hijos tiene:
Nodo = Lista->GetFirst();
Código:
while (Nodo != NULL)
{
     if (Nodo->ChildCount == 0 && Lista->CheckState[Nodo] > csUncheckedPressed)
     {
          [...]
     }
     Nodo1 = Lista->GetNext(Nodo1);
}
y parece que funciona bien. Al menos no cambia el valor de CheckState.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comportamiento extraño de TVirtualStringTree Angel.Matilla C++ Builder 4 08-08-2022 10:33:30
Un comportamiento extraño. TiammatMX Varios 5 03-09-2013 22:54:07
Extraño comportamiento de ADO r1d2m3 Conexión con bases de datos 3 12-12-2009 19:08:32
Comportamiento extraño del TPageControl Chris OOP 4 02-04-2009 21:16:09
Extraño comportamiento de Firebird 2.0 TrUnkS Firebird e Interbase 4 06-01-2007 23:05:57


La franja horaria es GMT +2. Ahora son las 06:00:52.


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
Copyright 1996-2007 Club Delphi