Pedías una función recursiva... y eso tienes
Pensar en recursivo no es fácil, puedes tomarlo como primer paso para incluir los archivos.
Código Delphi
[-]
procedure TreeListing(const Folder: string; Nodes: TTreeNodes;
ParentNode: TTreeNode);
var
AFolder: TSearchRec;
NewNode: TTreeNode;
begin
if FindFirst(IncludeTrailingPathDelimiter(Folder) + '*.*', faDirectory+ faAnyFile, AFolder) = 0 then
repeat
if ((AFolder.Attr and faDirectory) = faDirectory) and
((AFolder.Attr and faSysFile) <> faSysFile) and
(AFolder.Name <> '.') and (AFolder.Name <> '..') then
begin
NewNode := Nodes.Add(ParentNode, AFolder.Name);
TreeListing(IncludeTrailingPathDelimiter(CurrLocalPath+AFolder.Name) +
'*.*', Nodes, NewNode);
end;
if ((AFolder.Attr and faAnyfile) = faAnyfile)) then
until
FindNext(AFolder) <> 0;
FindClose(AFolder);
end;
Fijate que no hay else, esto es para que despues de añadir una carpeta, tambien intente añadir los archivos que haya.
He puesto faAnyFile, tú ajustalo más a lo que quieras.
saludos