ich hatte sowas auch mal gebraucht und ich habe folgendes gemacht
1. globale variablen
sortcol: integer;
ascending_sort: boolean;
2 dann schreibst du folgende events im listview
Code:
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var hItem: TListItem;
begin
// swap items hier vertausche ich jenachdem die itemns fuer einaml auf und dann ab
if ascending_sort then begin
hItem := Item1;
Item1 := Item2;
Item2 := hItem;
end;
case SortCol of
0:
begin
// nothing to do
end;
1: // string
begin
Compare := CompareStr(Item1.SubItems[SortCol - 1],
Item2.SubItems[SortCol - 1]);
end;
2: //string
begin
Compare := CompareStr(Item1.SubItems[SortCol - 1],
Item2.SubItems[SortCol - 1]);
end;
3: //integer
begin
Compare := (StrToInt(Item1.SubItems[SortCol - 1]) -
StrToInt(Item2.SubItems[SortCol - 1]));
end;
4: //currency
begin
Compare := Trunc((StrToCurr(Item1.SubItems[SortCol - 1]) * 100) -
(StrToCurr(Item2.SubItems[SortCol - 1]) * 100));
end; *)
5: //Datum + Zeit
begin
Compare := trunc(((StrToDate(Item1.SubItems[SortCol - 1]) + StrToTime(Item1.SubItems[SortCol])) * 10000) -
((StrToDate(Item2.SubItems[SortCol - 1]) + StrToTime(Item2.SubItems[SortCol])) * 10000));
end;
6: //Zeit
begin
Compare := Trunc(StrToTime(Item1.SubItems[SortCol - 1]) * 10000 -
StrToTime(Item2.SubItems[SortCol - 1]) * 10000);
end;
end; //case
end;
für dich hier interessant das handling fuer die 5te und 6te spalte
vorsicht mit meinem [SortCol - 1] bei click auf 0.te spalte gibts natuerlich
eins auf die muetze
Code:
// wir merken uns welche column geclickt wurde
procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
SortCol := Column.Index;
ListView1.AlphaSort;
ascending_sort := not ascending_sort;
end;
wenn du auf auf/ab verzichten willst kannste auch auf SortCol verzichten und
nimmst oben bezug auf Column.index