TDirectory.GetFiles/GetDirectories/GetFileSystemEntries have overloads taking a TFilterPredicate. You can provide your own accept function with that. The following example lists all dll and exe files from the given folder in one go.
files := TDirectory.GetFiles('C:\Temp\',
function(const Path: string; const SearchRec: TSearchRec): Boolean
begin
Result := TPath.MatchesPattern(SearchRec.Name, '*.exe') or
TPath.MatchesPattern(SearchRec.Name, '*.dll');
end);