Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-11-2005
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
TreeView parent

Hola a todos

Mi problema es el siguiente, quiero saber cual es el padre de cualquier nodo que yo seleccione (donde se encuantra osea su indice) de mi treview con parent del treview lo consigo hasta cierto punto por ejemplo digamos que mi treeview tiene lo siguiente

Código:
	+-OP1
	 -Op11 
	 +-Op12
		-Op121
		-Op122
	+-Op2
Si hago click en OP1 todo bien me sale que tiene hijos
Si hago click en OP2 me sale error "Access Violation at address 004B6CE9 in module 'treeview.exe'" ya que no tiene hijos, no quiero que me salga ese error solo quiero que me indique que es un nodo raiz sin hijos
Otro problema que veo es que si yo hago click en Op121 me muestra que el padre es Op12 nose como le haria para que me muestre que existen 2 padres para Op121 que seria Op12 y OP1.

Lo estube haciendo de la siguiente manera

Código Delphi [-]
IF treeview.Selected.HasChildren=TRUE THEN
  showmessage('Tiene Hijos')
ELSE
begin
  showmessage('NO Tiene Hijos');
  IF treeview.Selected.Parent.Count>0 THEN //Aqui Marca el Error
     showmessage('el padre es '+treeview.Selected.Parent.Text+' esta en
     la posiciòn '+ inttostr(treeview.Selected.Parent.AbsoluteIndex))
  ELSE
     showmessage('NO Tiene Hijos porque se encuentra como nodo raiz padre); 
    //no entra a este else
end;

Cualquier idea o sugerencia sera bienvenida, gracias por adelantado y que tengan un bonito dia.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 09-11-2005 a las 15:59:45.
Responder Con Cita
  #2  
Antiguo 09-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Parece que estás confundiendo dos cosas opuestas. Que un nodo tenga padre es completamente independiente de que tenga hijos. Para saber si un nodo tiene padre basta que verifiques que Node.Parent es distinto de nil. Para saber si tiene hijos basta que verifiques que Node.Count > 0.

Nunca hagas referencias a Node.Parent.Count si aún no has verificado que Node.Parent sea distinto de nil, ya que si lo es, tiendrás el "Access Violation".

// Saludos
Responder Con Cita
  #3  
Antiguo 09-11-2005
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Muchisimas gracias Roman mi primer problema solucionado pero aun no se me ocurre que cuando haga click en Op121 me muestra sus 2 padres correspondientes Op12 y OP1, alguna pequeña idea por donde empezar porfa, mi arbol podria tener muchos niveles eso quiere decir que un nodo que escoja podria tener muchos padres.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #4  
Antiguo 09-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si lo que quieres saber son todos los padres de un nodo, es decir, padre, abuelo, bisabuelo etc. podrías usar un ciclo del estilo:

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

begin
  {
    Aquí NodoPadre será el padre de ElNodo que te interese
  }
  NodoPadre := ElNodo.Parent;

  {
    Recorres la lista de padres hacia arriba en la jerarquía.
    Cuando llegues a nil es que ya no hay padre y estás en la raíz
  }
  while NodoPadre <> nil do
  begin
    {
      Haces lo que tengas que hacer con este padre  
    }

    // Asciendes un nivel, tomando el padre del padre actual
    NodoPadre := NodoPadre.Parent;
  end;
end;

// Saludos

Última edición por roman fecha: 09-11-2005 a las 17:43:06.
Responder Con Cita
  #5  
Antiguo 09-11-2005
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Mil Gracias Roman era lo que necesitaba.
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
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


La franja horaria es GMT +2. Ahora son las 06:28:12.


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