Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Obtener el index de un Nodo (https://www.clubdelphi.com/foros/showthread.php?t=64542)

Khronos 06-04-2009 23:19:46

Obtener el index de un Nodo
 
Hola, necesito conocer el index de un nodo:

+Nodo1
--- Hijo
--- Hijo2
+Nodo2 <--- Necesito conocer este identificador
--- Hijo
--- Hijo2

Lo que yo hago es lo siguiente, en el evento OnChange del TTreeView:

Código Delphi [-]
if node.Level = 1 then
      begin
          if node.Index = 0 then
            begin
              if node.GetPrev.Index = 1 then TthreadAlbumList.Create(Node.text);
              if node.GetPrev.Index = 2 then TthreadArtistList.Create(Node.text);
              if node.GetPrev.Index = 3 then TthreadStyleList.Create(Node.text);
              if node.GetPrev.Index = 4 then TthreadFolderList.Create(Node.text);
            end else
              begin
                   {Aquí necesito conocer el Index como antes, para ejecutar el repectivo thread, pero no encuentro la forma :(}

              end;

      end;

Saludos y gracias.

Khronos 07-04-2009 11:17:16

Alguien tiene alguna idea?

Saludos y gracias.

Caro 07-04-2009 13:57:44

Hola, no te sirve AbsoluteIndex, con eso él indice de tu nodo2 sería 3.

Código Delphi [-]
 Case Node.AbsoluteIndex Of
  0:;
  1:;
  2:;
  3://Nodo2;
  ..........
 end;

Saluditos

Khronos 07-04-2009 22:48:36

Gracias por responder Caro, pero no me sirve, ya que no se puede prever el número de hijos que tendrá cada nodo, de esa forma el AbsolutIndex varía y lo que yo quiero es tener un valor fijo.

Saludos y gracias.

Cristalero 08-04-2009 09:09:56

Nivel del nodo de un árbol
 
Lo puedes saber de la siguiente manera: pon en onchanged lo siguiente haber que tal:

showmessage(IntToStr(treeview1.Selected.Level));

treeview1 = nombre de tu árbol

Suerte, ya me dirás que tal.

Saludox!

Khronos 08-04-2009 13:08:14

Hola cristalero, gracias por responder pero si te fijas en el código ya uso la propiedad level del TreeView, pero no necesito obtener el nivel, sino el identificador de cada nodo "padre".

Con el código que puse, si seleccionamos un nodo hijo1, nos obtendría el index del padre y ejecutaría el respectivo Thread, pero si seleccionamos un hijo2 o 3 el código no funcionaría :(


Saludos y gracias.

Khronos 08-04-2009 13:34:11

Hola, gracias por vuestra ayuda, ya conseguí resolver el problema.


Código Delphi [-]
procedure TFMain.TreeViewChange(Sender: TObject; Node: TTreeNode);
var
str: TStringList;
i, u: integer;
s: string;
begin

  if node.level = 0 then
    begin
       if node.Index = 1 then
      begin
        Node.DeleteChildren;
        str:= dbEngine_GetAlbumList;
          for i := 0 to str.Count -1 do
            begin
               TreeView.Items.AddChild(node, str.Strings[i]);
            end;
      end;

    if node.Index = 2 then
      begin
        Node.DeleteChildren;
        str:= dbEngine_GetArtistList;
          for i := 0 to str.Count -1 do
            begin
               TreeView.Items.AddChild(node, str.Strings[i]);
            end;
      end;

    if node.Index = 3 then
      begin
        Node.DeleteChildren;
        str:= dbEngine_GetStyleList;
          for i := 0 to str.Count -1 do
            begin
               TreeView.Items.AddChild(node, str.Strings[i]);
            end;
      end;

    if node.Index = 4 then
      begin
        Node.DeleteChildren;
        str:= dbEngine_GetFolderList;
          for i := 0 to str.Count -1 do
            begin
               TreeView.Items.AddChild(node, str.Strings[i]);
            end;
      end;
    end;

    if node.Level = 1 then
      begin
          PlayList.Items.Clear;

          if node.Index = 0 then
            begin
              case Node.GetPrev.index of
                1: TthreadAlbumList.Create(Node.text);
                2: TthreadArtistList.Create(Node.text);
                3: TthreadStyleList.Create(Node.text);
                4: TthreadFolderList.Create(Node.text);
              end;
            end else
              begin
                  s:= node.text;
                  for u := node.index downto 0 do
                    begin
                      node:= node.GetPrev;
                    end;
                      case Node.Index of
                         1: TthreadAlbumList.Create(s);
                         2: TthreadArtistList.Create(s);
                         3: TthreadStyleList.Create(s);
                         4: TthreadFolderList.Create(s);
                      end;
              end;

      end;


end;

Saludos. ;)


La franja horaria es GMT +2. Ahora son las 02:12:46.

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