Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   SIncromizar TTreeview con un Listbox (https://www.clubdelphi.com/foros/showthread.php?t=88649)

Rolando Glez 09-07-2015 23:14:42

SIncromizar TTreeview con un Listbox
 
Hola a todos tal vez alguien me pueda tirar un cabo y me ayude a orientarme en sincronizar un TTreeview con un Listbox,el problema es que segun veo el TTreeview
muestra todo el arbol, algo que no deseo, lo que necesito es que en un Listbox solo se muestren los nodos siblibling de un nivel dado y a travez de botones de navegacion mover el puntero en el Treeview referenciado desde el Listbox es decir cuando hago click sobre un item del Listbox automaticamente se actualice el puntero del cursor en el TTreview cuestion que si navego con el boton de navegacion navegue sobre el nodo seleccionado y me vuelva a mostrar todos los nodos sibling del proximo nivel, este comportamiento debe hacerlo tanto si navego hacia delante desde un nodo determinado asi como hacia atras hacia el root del arbol, el TTreview seria usado para que contega el arbol pero no con idea de mostrarlo a no ser que alguien me diga como hacer esto solo con el treeView saludos espero su ayuda

Rolando Glez 13-07-2015 20:00:49

He solucionado la sincronizacion
 
Hola ,con la ayuda de un amigo se ha resuelto el algoristmo para sincronizar ambos componentes aqui le muestro :
Código Delphi [-]
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
  //navegacion hacia el root del arbol
  if nodocursor<>root then
  begin
    nodocursor:=nodocursor.GetPrev;
    //buscando el primer nodo del level
    while nodocursor.getPrevSibling<>nil do
    nodocursor:=nodocursor.getPrevSibling;
    if not odd(NodoCursor.Level) then
      Label1.caption:='White Moves'
    else
      Label1.Caption:='Black Moves';
    llena_listbox(nodoCursor);//display nodos
  end;
end;

procedure TForm1.llena_listbox(n: TTreeNode);
var
  n1: TTreeNode;
  plyb:string;
begin 
  ListBox1.Clear;
  nodoCursor := n;
  n1 := n;
  //add todos los nodos sibling al listbox
  Repeat
    ListBox1.Items.Add(n1.text);
    n1 := n1.getNextSibling;
  Until n1 = nil;
end; 

procedure TForm1.ListBox1Click(Sender: TObject); 
var
  n3:Ttreenode;
begin 
  n3:=nodocursor.getnext;
  if n3.Text<>'End' then //ultimo nodo de la rama
  begin
    repeat
      //buscando item seleccionado del listbox en nodos de arbol
      if ListBox1.Items[ListBox1.ItemIndex] = nodoCursor.Text then
        break;
      nodoCursor := nodoCursor.getNextSibling;
    until nodoCursor = nil;
    //actualizando el puntero al arbol 
    nodoCursor := nodoCursor.getFirstChild;
    if not odd(NodoCursor.Level) then
      Label1.caption:='White Moves'
    else
      Label1.Caption:='Black Moves';
    llena_listbox(nodoCursor); //display nodos
  end
end;

ecfisa 13-07-2015 21:05:29

Hola Rolando Glez.

Gracias por compartir la solución ^\||/

Saludos :)


La franja horaria es GMT +2. Ahora son las 09:59:13.

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