Я делал так :
...
Filt := TBitmapCodecManager.GetFileTypes;
FiltExt := TDictionary<string,boolean>.Create;
A := Filt.Split([';']);
for i := 0 to High(A) do
FiltExt.AddOrSetValue(String.LowerCase(A[i].Remove(0,1)),False);
...
Files := TDirectory.GetFiles(IncludeTrailingPathDelimiter(DirName),'*.*',
function(const Path: string; const SearchRec: TSearchRec): Boolean
var
SR: TSearchRec;
S : String;
begin
S := String.LowerCase(TPath.GetExtension(SearchRec.Name));
Result := FiltExt.ContainsKey(S);
if Result then
begin
SR := SearchRec;
SR.Name := Path + SR.Name;
FCurrentDirectoryFiles.Add(SR);
end;
end);
...