En principio es correcto,
realizas un create del objeto StringList antes de asignar al FTP.List
Código Delphi
[-]function FTP;
Var StringList : tStringList;
r : Integer;
begin
StringList := TSTringList.Create IdFTP1.host := Host;
IdFTP1.User := User;
IdFTP1.Password := Password;
try
IdFTP1.connect;
IdFTP1.changedir(dir);
except
end;
IdFTP1.List(StringList, '*.txt', False);
for r := 0 to StringList.count-1 do begin
lista.Items.add(StringList[r]);
end;
IdFTP1.disconnect;
StringList.Free;
end;
Antes me referia a que copiaras el texto del mensaje de error que te da cuando ejecutas el programa.