Hola,
Mira en la ayuda de Delphi por las funciones FindFirst, FindNext y FindClose. También puedes buscar "Finding a file" para más información al respecto.
A continuación algo de código que pueda darte una idea (en la ayuda de las funciones susomentadas encontrarás ejemplos de uso de las mismas).
Código Delphi
[-]
function TForm1.ListaDirectorios(directorioPadre: string) : TStringList;
var
sr: TSearchRec;
begin
Result := TStringList.Create;
if FindFirst(directorioPadre + '*', faDirectory, sr) = 0 then
repeat
if (sr.Attr = faDirectory) then
Result.Add(directorioPadre + sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
function TForm1.ListaArchivos(directorioPadre: string) : TStringList;
var
sr: TSearchRec;
begin
Result := TStringList.Create;
if FindFirst(directorioPadre + '*', faAnyFile, sr) = 0 then
repeat
if (sr.Attr and faDirectory = 0) or (sr.Name <> '.')
and (sr.Name <> '..') then
Result.Add(directorioPadre + sr.Name);
until FindNext(sr) <> 0;
FindClose(sr);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items := ListaDirectorios('C:\');
ListBox2.Items := ListaArchivos('C:\');
end;