Зачем так сложно?
Код:
uses Masks;
procedure FindMp3(ADir : String; AFilter : String; ASubfolders : Boolean);
var
F : TSearchRec;
iFound : Integer;
begin
ADir := IncludeTrailingPathDelimiter(ADir);
iFound := FindFirst(ADir + '*.*',faAnyFile,F);
While iFound = 0 Do
Begin
If (F.Name <> '.') And (F.Name <> '..') Then
Begin
If ((F And faDirectory) <> 0) And ASubfolders
Then FindMP3(ADir + F.Name,AFilter,ASubfolders)
Else
If MatchesMask('*'+AFilter+'*.mp3',FName) Then
Form1.ListBox.Items.Add(ADir + F.Name);
End;
iFound := FindNext(F);
End;
FindClose(F);
end;
И вся любовь...
ЗЫ. Не помню точно в какой последовательности идут параметры в MatchesMask, может маску и имя файла надо поменять местами. Ну и список, куда добавляются файлы написал "от балды", поправишь соответсвенно.