implementation {$R *.dfm} type {Comme la structure TSearchrec n'est pas utilisable tel quel, on utilise une classe pour l'emballer} TSearchRecObj = class (TObject) Sr: TSearchRec; end; {Fonction de tri personnalisé en fonction des dates des fichiers} function SortList(List:TStringList;Index1,Index2:Integer):Integer; var Obj1, Obj2: TSearchRecObj; begin {Récupérer les objets pointés par la liste de chaines après transtypage} Obj1 : = TSearchRecObj(List.Objects[Index1]); Obj2 := TSearchRecObj(List.Objects[Index2]); {Comparaison "classique" en ordre croissant} if Obj1.Sr.Time < Obj2.Sr.Time then Result : = -1 else if Obj1.Sr.Time > Obj2.Sr.Time then Result := 1 else Result := 0; end ; procedure TForm1.Button1Click(Sender: TObject); var Sr: TSearchRec; SrObj: TSearchRecObj; Sl: TStringList; i: integer; begin Memo1.Clear; Sl : = TStringList.Create; try if FindFirst('*.*', faAnyFile - faDirectory, Sr) = 0then begin repeat {Créer un wrapper de TSearchRec pour chaque fichier trouvé} SrObj := TSearchRecObj.Create; SrObj.Sr := Sr; {Ajout à la liste} Sl.AddObject(DateTimeToStr(FileDateToDateTime(Sr.Time))+ ' - ' + Sr.Name, SrObj); until FindNext(Sr) <> 0; FindClose(Sr); end; {Tri de la liste de chaines} Sl.CustomSort(SortList); {Visualisation du résultat} Memo1.Text : = Sl.Text; finally {Destruction des objets pointés par la liste} for i := Sl.Count - 1 downto 0do Sl.Objects[i].Free; { Destruction de la liste de chaine } Sl.Free; end; end; Contrôles nécessaires : 1 TButton 1 TMemo (pour contrôler le résultat (pas utile en production)