Ich verwende die ListView Sortierfunktion aus dem ListView Sample von Luckie
Zitat:
// Sortierfunktion
// (Basis von NicoDE; modifziert von Mathias Simmack)
Delphi-Quellcode:
function CompareFunc(lp1, lp2, SubItem: LPARAM): integer; stdcall;
var
buf1,
buf2 : WideString;
a,
b : integer;
begin
SetLength(buf1, MAX_PATH);
ZeroMemory(@buf1[1], MAX_PATH);
SetLength(buf2, MAX_PATH);
ZeroMemory(@buf2[2], MAX_PATH);
ListView_GetItemText(LVHandle, lp1, SubItem, @buf1[1], MAX_PATH);
ListView_GetItemText(LVHandle, lp2, SubItem, @buf2[1], MAX_PATH);
case SubItem of
// Dateigröße
1:
begin
// alles nach dem Leerzeichen entfernen (z.B. "12345 B")
if(pos(#32, buf1) > 0) then
delete(buf1, pos(#32,buf1), length(buf1));
if(pos(#32, buf2) > 0) then
delete(buf2, pos(#32, buf2), length(buf2));
if UpDown then
begin
b := StrToIntDef(buf1, 0);
a := StrToIntDef(buf2, 0);
end else
begin
a := StrToIntDef(buf1, 0);
b := StrToIntDef(buf2, 0);
end;
if(a > b) then
Result := 1
else if(a < b) then
Result := -1
else
Result := 0;
end
// Name oder Typ
else begin
if UpDown then
Result := lstrcmpi(@buf2[1], @buf1[1])
else
Result := lstrcmpi(@buf1[1], @buf2[1]);
end;
end;
end;
Beim addieren der Items weise ich das Flag LVIF_PARAM zu.
Delphi-Quellcode:
procedure TSkinListView.InsertItem(hListView: hWnd; nItem: Integer; wsItems: WideString);
var
lvItem: LV_ITEMW;
begin
lvItem.mask := LVIF_TEXT or LVIF_PARAM;
lvItem.iItem := nItem;
lvItem.pszText := PWideChar(wsItems);
lvItem.iSubItem := 0;
ListView_InsertItem(hListView, lvItem);
end;
ohne dieses Flag sind (lp1, lp2) immer 0.
Die Sortierrichtung wird durch den UpDown Status geschaltet.
Normalerweise sollte die Funktion die Daten Alphabetisch sortieren tut sie aber nicht.
Da ist irgendwie alles Durcheinander und ich finde den Fehler nicht.
lp1 sollte eigentlich bei 0 beginnen und lp2 bei 1.
Der wert von lp1 ist aber 2 und der von lp2 irgend ein imaginärer wert bsp. 12345678
Die Sortierung ist dementsprechend total durcheinander.
Woher kommt dieser Fehler ?
Jemand ne Idee?
Wie man am Bild sehen kann alles durcheinander.
gruss