Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
Delphi 12 Athens
|
AW: array of record sortieren
7. Dez 2020, 22:40
Das ist der Code aus deinem ersten Post. Habe ich mal umgemodelt. Einfach getippt. Nicht getestet.
Delphi-Quellcode:
procedure TSkinListView.SortItems(hListView: hWnd; ColumnIndex: Integer);
var
i, j : Integer;
lItemsInfoArray : array of TItemsInfo;
StringList: TStringList;
ItemCount: Integer;
buf: array [0 .. 255] of Char;
ItemText: PWideChar;
begin
ListView_SortItems(hListView, @CompareFunc, ColumnIndex); // Liste wird sortiert
StringList := TStringList.Create;
try
ItemCount := ListView_GetItemCount(hListView);
for i := 0 to ItemCount - 1 do
begin
ZeroMemory(@buf, sizeof(buf));
ListView_GetItemText(hListView, i, 1, buf, sizeof(buf));
ItemText := buf;
StringList.Add(ItemText); // Stringliste anhand der Sortierung erstellen.
end;
//***************************************************************************************
// Das hier habe ich mal zugefügt ...
SetLength(lItemsInfoArray,length(ItemsInfo));
for i := High(ItemsInfo) downto Low(ItemsInfo) do
begin
j := StringList.IndexOf(ItemsInfo[i].IdentStr);
if j>=0 then
begin
lItemsInfoArray[j] := ItemsInfo[i];
StringList[j] := 'Irgend ein Text, damit das Item nicht mehr gefunden wird. Ist ja schon zugewiesen';
end
else
begin
// Hier ne Fehlerbehandlung rein
end;
end;
// in lItemsInfoArray haben wir jetzt die korrekte Reihenfolge. Nun wieder zurück kopieren.
for i := High(lItemsInfoArray) downto Low(lItemsInfoArray) do
ItemsInfo[i] := lItemsInfoArray[i];
// und zwar bis hier hin zugefügt
//***************************************************************************************
finally
StringList.Free;
end;
end;
|
|
Zitat
|