const
merk: integer = -1;
var
aufsteigend: boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
// --- sollte im Objektinspektor eingestellt werden ---
Listview1.viewstyle := vsReport;
Listview1.sorttype := stNone;
/// ----------------------------------------------------
end;
function CustomSortProc(Item1, Item2: TListItem; ParamSort: integer):
integer; stdcall;
var s1, s2: string;
begin
if ParamSort = 0 then begin
s1 := Item1.caption;
s2 := Item2.caption;
end else begin
s1 := Item1.Subitems[ParamSort - 1];
s2 := Item2.Subitems[ParamSort - 1];
end;
Result := (2 * ord(aufsteigend) - 1) * lstrcmp(PChar(s1), PChar(s2));
end;
// Beispielaufruf
procedure TForm1.ListView1ColumnClick(Sender: TObject;
Column: TListColumn);
begin
if merk <> Column.Index then aufsteigend := true;
ListView1.CustomSort(@CustomSortProc, Column.Index);
merk := Column.Index;
aufsteigend := not aufsteigend;
end;