Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Personalizar TVirtualStringTree

En un TVirtualStringTree en que tengo activadas las casillas de verificación, ¿se puede conseguir que sólo aquellos nodos con descendientes sean los que muestran dicha casilla? He estado probando con el evento OnInitChildren pero no consigo lo que busco, que sería esto

La imagen está preparada, evidentemente.
Responder Con Cita
  #2  
Antiguo 22-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
En el GetImageIndex puedes indicar qué imagen poner, supongo que podrás asignarle "null", o una en blanco.

Código Delphi [-]
procedure TFcuentas.vstArbolGetImageIndex(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
  var Ghosted: Boolean; var ImageIndex: Integer);
var
  pRec : ^TRecBase;
  iNivel : Integer;
begin
  inherited;
  if iMaxDigitos=0 then
    Exit;
  if Column=0 then
  begin
    pRec := Sender.GetNodeData(Node);
    iNivel := pRec.Nivel;
    if iNivel=1 then
      ImageIndex := 0
    else
    if (iNivel>1) and (iNivel < iMaxDigitos) then
      ImageIndex := 1
    else
    if iNivel=iMaxDigitos then
      ImageIndex := 2;
  end;
end;

Responder Con Cita
  #3  
Antiguo 22-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
En el GetImageIndex puedes indicar qué imagen poner, supongo que podrás asignarle "null", o una en blanco.
Gracias por la sugerencia pero no hace lo que quiero porque la imagen la pone al lado del CheckBox.

y lo que me hace falta es que no aparezca el CheckBox. Estuve probando en el evento OnInitChildren, pero no me hace nada.
Responder Con Cita
  #4  
Antiguo 22-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero, ¿has visto la imagen que te he puesto de ejemplo?
Responder Con Cita
  #5  
Antiguo 22-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si te fijas, en las cuentas no tiene el recuadro.





Y no olvides las opciones de "paint", por si acaso es una de ellas:


Responder Con Cita
  #6  
Antiguo 22-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pero, ¿has visto la imagen que te he puesto de ejemplo?
Vale. Tengo que repasar las propiedades del elemento. Ahí tienes razón.
Responder Con Cita
  #7  
Antiguo 22-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pero, ¿has visto la imagen que te he puesto de ejemplo?
Vale. HE comprobado que las propiedades del TreeView las tengo como las has puesto, pero adaptando tu código de Delphi a Builder:
Código:
void __fastcall TfEleccion::MesasGetImageIndex(TBaseVirtualTree *Sender,
      PVirtualNode Node, TVTImageKind Kind, TColumnIndex Column,
      bool &Ghosted, int &ImageIndex)
{
     PTreeEle tDato;

     if (Column == 0)
     {
          tDato = (PTreeEle)Mesas->GetNodeData(Node);
          if (tDato->CodPar != 0)
               ImageIndex = 7;
     }
}
siendo ese valor 7 de ImageIndex un cuadro blanco, sigue saliendo lo que subía en al segunda imagen esta mañana. Y para prevenir valores erróneos cuando cargo el TreeView me aseguro que ese valor CodPar sólo contenga valores válidos al cargar el último nodo (el de los partidos).

Mientras tanto estuve investigando y encontré en StackOverFlow un código que hace lo que busco, pero no soy capaz de entender como aplicarlo. El enlace es este: https://stackoverflow.com/questions/...-by-some-nodes
Responder Con Cita
  #8  
Antiguo 22-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Básicamente lo que me hace falta es esto:

Y el código de StackOverFlow debería hacer eso, pero ya os digo que no sé como aplicarlo.
Responder Con Cita
  #9  
Antiguo 22-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues "juega" con las propiedades porque no hay que hacer nada más, aparentemente.
He quitado las imágenes que yo le estaba poniendo y, por defecto, sale como quieres:


Responder Con Cita
  #10  
Antiguo 22-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias. Seguiré probando.
Responder Con Cita
  #11  
Antiguo 23-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
¡Por fin!

Lo logré y al final resultó mucho más sencillo de lo que pensaba.

He utilizado este código en el evento OnInitNode:
Código:
void __fastcall TfEleccion::MesasInitNode(TBaseVirtualTree *Sender, PVirtualNode ParentNode, PVirtualNode Node, TVirtualNodeInitStates &InitialStates)
{
     PTreeEle DatEle = (PTreeEle)Mesas->GetNodeData(Node);

     if (DatEle->CodPar != 0)
          Node->CheckType = ctNone;
     else
     {
          Node->CheckType = ctCheckBox;
          Sender->CheckType[Node]  = ctTriStateCheckBox;
          Sender->CheckState[Node] = csUncheckedNormal;
     }
}
He utilizado, en este caso, uno de los campos de la estructura de datos que sólo debe tener valor en ese último nodo. No sé si será la forma más elegante, pero funciona.
Responder Con Cita
Respuesta



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
Cargar datos en TVirtualStringTree Angel.Matilla C++ Builder 2 28-09-2019 12:04:22
Personalizar reporte Vlady Impresión 4 10-09-2008 17:35:06
Personalizar notificaciones angelp4492 API de Windows 4 08-01-2008 19:18:33
Personalizar bordes piccolo2101 Varios 4 27-10-2005 18:07:24
personalizar menu pablo OOP 2 12-05-2005 00:14:15


La franja horaria es GMT +2. Ahora son las 06:07:47.


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