Quand on trie les colonnes dates en utilisant ce proceder pour que le tri soit correcte il faut que les date soit au format AAAA/MM/JJ
on peut tres bien trier les colonnes date et heure en utilisant dans le OnCompare du TListView le truc suivant :
procedure TForm1.ListeCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var date1, Date2 : Tdate; begin if (SortedColumn = 1) or (SortedColumn = 2) then begin date1:= strtodateTime(Item1.SubItems[0]+' '+Item1.SubItems[1]); date2:= strtodateTime(Item2.SubItems[0]+' '+Item2.SubItems[1]); if date1=date2 then Compare:=0; if date1>date2 then Compare:=1; if date1 if Descending then Compare := -Compare; exit; end; if SortedColumn = 0 then Compare := CompareText(Item1.Caption, Item2.Caption) else if SortedColumn > 0 then Compare := CompareText(Item1.SubItems[SortedColumn-1], Item2.SubItems[SortedColumn-1]); if Descending then Compare := -Compare; end;
Dans cet exemple il y a une colonne date et une colone heure, c'est pour cela que l'on concatene les deux champs. La colonne deux est la colonne date, et la colonne trois est la colonne heure. Le boolean Descending sert à memoriser l'ordre de tri et à inverser cet ordre lors de pressions successives.
procedure TForm1.FoundFilesColumnClick(Sender: TObject; Column: TListColumn); var i : byte; begin TListView(Sender).SortType := stNone; if Column.Index <> SortedColumn then begin SortedColumn := Column.Index; Descending := False; end else Descending := not Descending;
// pour ajouter un triangle qui indique le sens du tri for i:=0 to TListView(Sender).Columns.Count-1 do TListView(Sender).Column[i].ImageIndex:=-1; if descending then TListView(Sender).Column[Column.Index].ImageIndex:=45 else TListView(Sender).Column[Column.Index].ImageIndex:=40;