![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Cita:
solo tiene un par de detalles, que despues de ejecutar paso a paso se vé claramente.Por cierto, no te ha ayudado a "depurar el código" sino a trabajar recursivamente.
El primer detalle es que hay que usar AddChild para que los meta dentro. El segundo, es que al llamar a la función recursiva, hay que DARLE LA RUTA COMPLETA. Una "manía" mia, es que al llamar a FindFirst, no hace falta usar el includePathDelimiter, ya que siempre se le da la ruta con la barra al final. saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#2
|
||||
|
||||
|
Cita:
Se me pasó que el metodo para agregar nodos hijos es AddChild, como bien mencionas más a bajo. Cita:
Cita:
((AFolder.Attr and faSysFile) <> faSysFile) tal vez esté de más, ya que en la llamada a FindFirst se le está diciendo que solo busque carpetas. Cita:
![]() |
|
#3
|
|||
|
|||
|
Perdón por estar tanto tiempo sin contestar...
He probado tu truco, Lepe, y funciona perfectamente, sólo hay un problemilla. Por ejemplo, si tengo esta carpeta: C:\Archivos de Programa\Archivos Comunes\Microsoft Shared ... y hago: Sólo me muestra lo siguiente: C:\ (<- esto no, es sólo para tener una referencia) Archivos de Programa Archivos Comunes (...) (...) Como podría hacer que se mostraran las carpetas dentro de Archivos comunes? |
|
#4
|
|||
|
|||
|
Vale, he avanzado algo... He estado jugando con la propiedad OnExpand del TreeView y se me ha ocurrido esto:
Ahora sólo hay un problema, al expandir una carpeta se añaden las carpetas y se muestra que se pueden expandir, perfecto, lo que yo queria, pero... ¡Se muestran las mismas carpetas dos veces! unas con la posibilidad de expandir y la otra no... No habria alguna forma de en vez de añadir un item substituirlo si este ya existe? |
|
#5
|
|||
|
|||
|
Hola, ya lo tengo casi... Esto es lo que he hecho:
Variables necesarias:
Procedimiento para añadir items al TreeView:
Procedimiento OnExpand del TreeView1:
...y para llamar-lo:
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... |
|
#6
|
||||
|
||||
|
Cosas como estas:
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. |
|
#7
|
||||
|
||||
|
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; |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|