Deine Funktion gibt mir falsche werte zurück.
Delphi-Quellcode:
PItemsInfo = ^TItemsInfo;
TItemsInfo = record
Item: Integer;
SubItem: Integer;
ImgIcon: HICON;
Extension: WideString;
Path: WideString;
Width: Integer;
Height: Integer;
IdentStr: WideString;
end;
Delphi-Quellcode:
type
TArray = array of TItemsInfo;
Delphi-Quellcode:
procedure TSkinListView.Swap(
var Data1, Data2: TItemsInfo);
var
Temp : TItemsInfo;
begin
Temp := Data1;
Data1 := Data2;
Data2 := Temp;
end;
function TSkinListView.Compare(
const Data1, Data2: TItemsInfo): Integer;
begin
Result := CompareText(Data1.IdentStr, Data2.IdentStr);
end;
procedure TSkinListView.SortArray(
var ItemsInfo: TArray);
var
Index : Integer;
Laenge : Integer;
Swapped : Boolean;
begin
Laenge := Length(ItemsInfo);
repeat
Swapped := False;
for Index := 1
to Laenge - 1
do
begin
if Compare(ItemsInfo[
Index - 1], ItemsInfo[
Index]) > 0
then
begin
Swap(ItemsInfo[
Index - 1], ItemsInfo[
Index]);
Swapped := True;
end;
end;
Dec(Laenge);
until not Swapped;
end;
Delphi-Quellcode:
var
ItemsArray: TArray;
begin
ItemCount := ListView_GetItemCount(hListView);
SetLength(ItemsArray, ItemCount);
i := 0;
while i <= ItemCount - 1 do
begin
ItemsArray[i].IdentStr := ItemsInfo[i].IdentStr;
ItemsArray[i].Item := ItemsInfo[i].Item;
ItemsArray[i].SubItem := ItemsInfo[i].SubItem;
ItemsArray[i].ImgIcon := ItemsInfo[i].ImgIcon;
ItemsArray[i].Extension := ItemsInfo[i].Extension;
ItemsArray[i].Path := ItemsInfo[i].Path;
ItemsArray[i].Width := ItemsInfo[i].Width;
ItemsArray[i].Height := ItemsInfo[i].Height;
Inc(i);
end;
SortArray(ItemsArray);
EDIT:
Das hier
if Compare(ItemsInfo[Index - 1], ItemsInfo[Index]) > 0 then
Nicht jeder Eintrag hat ein Icon und wenn kein Icon existiert ist der IdentStr leer.
muss zu
Compare(ItemsInfo[Index - 1], ItemsInfo[Index]);
geändert werden damit alles mitgenommen wird nicht nur die Strings.
Hmm.. geht nur wenn ich numeric sortiere nicht mit string.
https://im-coder.com/sortieren-von-a...habetisch.html
Danke.