Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-12-2005
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 22
[Gunman] Va por buen camino
Hola, ya lo tengo casi... Esto es lo que he hecho:

Variables necesarias:
Código Delphi [-]
 var
   MainFrm: TMainFrm;
   CurrentDir, FirstPath: String;

Procedimiento para añadir items al TreeView:
Código Delphi [-]
 procedure AddFiles(const Folder: string; Nodes: TTreeNodes;
   ParentNode: TTreeNode);
 var
   AFolder: TSearchRec;
   NewNode: TTreeNode;
   i: Integer;
 begin
   if FindFirst(Folder + '*.*', faDirectory, AFolder) = 0 then
   repeat
     if (AFolder.Name <> '.') and (AFolder.Name <> '..') then
     begin
       if ParentNode <> nil then
       begin
         for i := 0 to ParentNode.Count-1 do
        [i] if (ParentNode.Item.Text = AFolder.Name) then
         begin
           ParentNode.Item[i].Delete;
         end;
       end;
       NewNode := Nodes.AddChild(ParentNode, AFolder.Name);
       AddFiles(IncludeTrailingPathDelimiter(Folder+AFolder.Name) +
                 '*.*', Nodes, NewNode);
     end;
   until FindNext(AFolder) <> 0;
   FindClose(AFolder);
 end;

Procedimiento OnExpand del TreeView1:
Código Delphi [-]
 procedure TMainFrm.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
   var AllowExpansion: Boolean);
 var
   i: Integer;
 begin
   CurrentDir := FirstPath;
   for i := Node.Level downto 0 do
   if i = 0 then
   CurrentDir := CurrentDir+Node.Text+'\'
   else
   CurrentDir := CurrentDir+Node.Parent.Text+'\';
   ShowMessage(CurrentDir);
   AddFiles(CurrentDir,TreeView1.Items,Node);
 end;

...y para llamar-lo:
Código Delphi [-]
 procedure TMainFrm.NewRegisterClick(Sender: TObject);
 begin
   TreeView1.Items.Clear;
   AddFiles('E:\Mis Documentos\Mis archivos recibidos\', TreeView1.Items, nil);
   FirstPath := ('E:\Mis Documentos\Mis archivos recibidos\');
 end;

Bueno, ahora el problema está en que me hace una excepción en algunos casos: "List index out of bounds (0)" en la línia: [i]if (ParentNode.Item.Text = AFolder.Name) then en el procedimient AddFiles.
Como puedo arreglar esto, no sé porqué hace este error...
__________________
l2prog.co.nr
Responder Con Cita
  #2  
Antiguo 24-12-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Cosas como estas:
Código Delphi [-]
    if ParentNode <> nil then
       begin
         for i := 0 to ParentNode.Count-1 do
         if (ParentNode.Item[i].Text = AFolder.Name) then
         begin
           ParentNode.Item.Delete;
En otro sitio te dirían que vale, que no pasa nada. Desde luego, creo que en estos foros buscamos la eficiencia y el buen hacer de las cosas. Es innecesario crear los items, y acto seguirlo eliminarlo porque salen repetidos. Deberás hacer algo al respecto.

En mi opinion, puedes añadir a la rutina recursiva, un parámetro FullDeep:Boolean, si lo pones a true, busca todos los niveles de carpeta, si lo pones a false, solo busca el nombre de las carpetas de primer nivel.

Esto último te sirve para representar los nodos iniciales en el TreeView (FullDeep:=false), despues en el OnExpand, solo haz de llamar a la misma rutina con FullDeep:= True.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 07-06-2010
Avatar de danilochavez
danilochavez danilochavez is offline
Registrado
 
Registrado: oct 2007
Ubicación: Xela
Posts: 1
Poder: 0
danilochavez Va por buen camino
Función recursiva en un TreeView

Hey guys...somewhere I found a very good and effective algorithm you are trying I guess...

procedure DirectoryTree(Tree:TTreeView;Memo1:TMemo ; RootDirectory:string);
var
sr: TSearchRec;
FileAttrs: Integer;
theRootNode : tTreeNode;
theNode : tTreeNode;

procedure AddDirectories(theNode: tTreeNode; cPath: string);
var
sr: TSearchRec;
FileAttrs: Integer;
theNewNode : tTreeNode;
begin
FileAttrs := faAnyFile; //TSearchRec constant
if FindFirst(cPath+'\*.*', FileAttrs, sr) = 0 then
begin
repeat
if ((sr.Attr and FileAttrs) = sr.Attr) and (copy(sr.Name,1,1) <> '.')
then
begin
theNewNode := Tree.Items.AddChild(theNode,sr.name);
AddDirectories(theNewNode,cPath+'\'+sr.Name);
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
end;

begin
FileAttrs := faAnyFile; //TSearchRec constant
theRootNode := Tree.Items.AddFirst(nil,RootDirectory);
if FindFirst(RootDirectory+'*.*', FileAttrs, sr) = 0 then
begin
theNode := Tree.Items.GetFirstNode;
AddDirectories(theNode,RootDirectory+sr.Name);
FindClose(sr);
end;
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 17:06:47.


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