Каждый раз при вызове функции Вы создаете экземпляр класса TStringList, но он остается неосвобожденным до конца работы программы. Отсюда и появляется утечка. Более корректно на мой взгляд было бы передавать в функцию уже созданный экземпляр этого класса. Т.е. переписать код так:
procedure TFormShablon.TimerTestFolderTimer(Sender: TObject);
var DncList:TStringList;
begin
DcnList:=TStringList.Create;
GetFileList('c:\123','*.*',DcnList);
.
.
.
DcnList.Free;
end;
Function GetFileList(dir:string='';mask:string='*.*';attr:integer=faAnyFile; List: TstringList): Cardinal;
var res:cardinal;s:tsearchrec;
begin
result:=-1;
if not Assigned(List) then
begin
result:=0;
Exit;
end;
if dir='' then dir:=GetCurrentDir;
res:=FindFirst(dir+'/'+mask,attr,s);
while res=0 do begin
List.Append(s.Name);
res:=FindNext(s);
end;
end;