En el ejemplo agregamos al evento OnClick de un botón el siguiente código:
procedure TfrmMain.btnAgregaMarcadorClick(Sender: TObject); var lcSearch: TSearchRec; lcFileAttr: integer; lcFatherNode: TTreeNode; lcChildNode: TTreeNode; lcPath: String; begin {$IFDEF UNIX} lcFileAttr:= 48; {$ELSE} lcFileAttr:= faDirectory; {$ENDIF} SelectDirectoryDialog1.Execute; lcPath:=SelectDirectoryDialog1.FileName; if Length(lcPath) > 0 then begin lcFatherNode:= TTreeNode.Create(TreeView1.Items); lcFatherNode:= TreeView1.Items.AddChild(TreeNodeRoot,lcPath); lcFatherNode.ImageIndex:=0; lcFatherNode.SelectedIndex:=0; lcFatherNode.Expanded:=True; end; lcPath:=lcPath+PathDelim; If FindFirst(lcPath+'*',faDirectory,lcSearch)=0 then begin repeat if lcSearch.Attr = lcFileAttr then begin if (lcSearch.Name = '.') or (lcSearch.Name = '..') then continue; lcChildNode:= TreeView1.Items.AddChild(lcFatherNode,lcSearch.Name); lcChildNode.ImageIndex:=0; lcChildNode.SelectedIndex:=0; AddDirectorios(lcChildNode,lcPath+lcSearch.Name); end; until FindNext(lcSearch) <> 0; FindClose(lcSearch); end; TreeView1.Refresh; end;
El siguiente procedimiento lo agregamos nosotros, este será llamado desde nuestro anterior proceso cuando encuentre un directorio, y será llamado recursivamente desde él mismo agregando los nodos hijos con el nombre de los directorios encontrados.procedure TfrmMain.AddDirectorios(elNodo: TTreeNode; cPath: String); var sr: TSearchRec; lcFileAttr: Integer; theNewNode : tTreeNode; begin {$IFDEF UNIX} lcFileAttr:= 48; {$ELSE} lcFileAttr:= faDirectory; {$ENDIF} if FindFirst(cPath+PathDelim+'*', faDirectory, sr) = 0 then begin repeat if sr.Attr = lcFileAttr then begin if (sr.Name = '.') or (sr.Name = '..') then continue; theNewNode := TreeView1.Items.AddChild(elNodo,sr.name); theNewNode.ImageIndex:=0; theNewNode.SelectedIndex:=0; AddDirectorios(theNewNode,cPath+PathDelim+sr.Name); end; until FindNext(sr) <> 0; FindClose(sr); end; end;
No hay comentarios:
Publicar un comentario