Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema copiando de un TShellTreeView a un Treeview (https://www.clubdelphi.com/foros/showthread.php?t=60107)

harpo 19-09-2008 22:19:59

Problema copiando de un TShellTreeView a un Treeview
 
Buenas,

tengo un código para copiar desde un TShellTreeView a un treeview que me está haciendo cosas bastante raras.

La idea es copiar los elementos seleccionados en el ShellTreeView al treeview, de modo que si se selecciona un archivo, se copie el archivo únicamente, y si se selecciona una carpeta, se copien todos los archivos y carpetas dentro de la misma de modo recursivo.

El código es el siguiente:

Código:

procedure TfrArbolSelec.FormCreate(Sender: TObject);
begin
  FPrimerNodo := TVSeleccionados.Items.Add(nil,'Copia de seguridad');
end;

procedure TfrArbolSelec.BoAnadirClick(Sender: TObject);
begin
  // si hay un nodo seleccionado
  if STVArbol.Selected <> nil then
  begin
    STVArbol.Selected.Expand(false);
    AnadirNodo(STVArbol.Selected,FPrimerNodo,'');

    if not FPrimerNodo.Expanded then FPrimerNodo.Expand(false);
  end;
end;

procedure TfrArbolSelec.AnadirNodo (Nodo:TTreeNode;Padre:TTreeNode;Path:String);
var
  i        :integer;
begin
    Nodo.Expand(false);

    if Nodo.HasChildren then // si es un directorio
    begin
      TVSeleccionados.Items.AddChild(Padre,Nodo.Text);
      for i:= 0 to Nodo.Count-1 do
        AnadirNodo(Nodo.Item[i],Nodo,Path + '\' + Nodo.Text);
    end
    else
    begin
      TVSeleccionados.Items.AddChild(Padre,Nodo.Text);
    end;

    Nodo.Collapse(false);
end;

El problema está en que al debugear, todo se copia como debe, sin embargo al volver a la aplicación, me encuentro con solo se ha copiado el primer item y el resto se ha duplicado en el árbol de origen, es decir, en el TShellTreeVIew :eek:

En la imagen se puede ver que los nombres de las carpetas dentro de "LP" se han duplicado dentro de la misma (con el icono de compartido :confused:)

http://img392.imageshack.us/my.php?image=dellt6.jpg

¿Qué estoy haciendo mal??

Gracias

coso 20-09-2008 14:16:42

Hola, creo que el problema te viene porque 'padre' es un nodo del treeview de origen, y estas añadiendo childs a el.

EDITO : un segundo, que miro de nuevo

coso 20-09-2008 14:21:35

si, si no me equivoco...
la primera vez que se llama a añadirnodo, 'nodo' pertenece a stvarbol y 'padre' a TVSeleccionados, mientras que en las sucesivas llamadas, tanto 'nodo' como 'padre' pertenecen a stvarbol, aunque hagas luego el addchild desde tvseleccionados. creo que van por alla los tiros. saludos y a ver si te sirve.

harpo 20-09-2008 20:42:24

Tienes toda la razón.

Queda así:

Código:

procedure TfrArbolSelec.AnadirNodo (Nodo:TTreeNode;Padre:TTreeNode;Path:String);
var
  i        :integer;
  NodoPadre:TTreeNode;
begin
    Nodo.Expand(false);

    if Nodo.HasChildren then // si es un directorio
    begin
      NodoPadre := TVSeleccionados.Items.AddChild(Padre,Nodo.Text);
      for i:= 0 to Nodo.Count-1 do
        AnadirNodo(Nodo.Item[i],NodoPadre,Path + '\' + Nodo.Text);
    end
    else
    begin
      TVSeleccionados.Items.AddChild(Padre,Nodo.Text);
    end;

    Nodo.Collapse(false);
end;

Muchas Gracias :)


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

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