Este código é parecido com VB, talvez você ou alguém do fórum possa traduzi-lo:
procedure BuscaSubDiretorios(strNomeDir: String;
Pai: TTreeNode);
var
sr: TSearchRec;
FileAttrs: Integer;
strNome: String;
begin
try
FileAttrs := faDirectory;
strNome := strNomeDir;
while strNome[Length(strNome)] = ´\´ do
strNome := copy(strNome,1,length(strNome) - 1);
if strNome[Length(strNome)] <> ´:´ then
strNome := ExtractFileName(strNome)
else
strNome := copy(strNome,1,length(strNome) - 1);
Pai := tvwEstrutura.Items.AddChild(Pai,strNome);
if FindFirst(strNomeDir + ´*.*´, FileAttrs, sr) = 0 then
begin
repeat
if (sr.Name <> ´.´) and (sr.Name <> ´..´) and
((sr.Attr > 15) and (sr.Attr < 32)) then //verifica se o arquivo encontrado é uma pasta
begin
BuscaSubDiretorios(strNomeDir + sr.Name + ´\´,Pai);
end;
until FindNext(sr) <> 0;
FindClose(sr);
end;
except
MessageDlg(´Debug: Erro no procedimento BuscaSubDiretorios´,mtError,[mbOk],0);
end;
end;
Anderson Diniz