Использовать FindFirst/FindNext/FindClose.
Код:
procedure ListFiles(APath : String; var AList : TStringList);
var
iFound : Integer;
F : TSearchRec;
begin
AList.Clear;
iFound := FindFirst(APath + '*.*',faAnyFile,F);
While iFound = 0 Do
Begin
If (F.Attr And faDirectory) = 0 Then AList.Add(F.Name);
iFound := FindNext(F);
End;
FindClose(F);
end;