Moin Tpercon,
lass dass Sortieren doch Delphi übernehmen.
Dazu müsstest Du Dir nur einen CustomSort deklarieren.
Code:
function SortProc(p_liItem1 : TListItem;p_liItem2 : TListItem; p_iColumnTag : integer) : integer; stdcall;
var
rNumber1 : integer;
rNumber2 : integer;
begin
Result := 0;
if p_iColumnTag = 0 then
begin
sValue1 := p_liItem1.Caption;
sValue2 := p_liItem2.Caption;
end
else
begin
sValue1 := p_liItem1.SubItems[p_iColumnTag-1];
sValue2 := p_liItem2.SubItems[p_iColumnTag-1];
end;
rNumber1 := StrToInt(sValue1);
rNumber2 := StrToInt(sValue2);
if rNumber1 = rNumber2 then
begin
Result := 0;
end;
Result := -1;
if rNumber1 > rNumber2 then
begin
Result := 1;
end;
if Form1.ActiveSortDirection = sdDescending then
begin
Result := -1 * Result;
end;
end;
Zum aufrufen dann
Code:
FListView.CustomSort(FSortProc,p_iColumnTag);
if FsdSortDirection = sdAscending then
begin
FsdSortDirection := sdDescending;
end
else
begin
FsdSortDirection := sdAscending;
end;
Der Aufruf ist jetzt so nicht direkt zu übernehmen, da ich mir das Füllen und bearbeiten des Listviews als Objekt ausgelagert habe, ausserdem ist die Sortierrichtung ein Aufzählungstyp.
Ausserdem habe ich noch die Sortierroutine abgespeckt und auf int angepasst, da ich das in dem ListView aus dem ich das habe nicht verwende. Ist deshalb nicht getestet, sollte aber funktionieren.
Wichtig: Ich habe den Tags der Items immer die Spaltennummer zugeordnet, damit das Sortieren auch funktioniert, wenn die Spalten umgestellt werden (FullDrag = true)