Hallo Christian,
erst einmal Danke für deine Unterstützung!
Der Coder aus deiner 1. Codebox ist der erste Code der auch funktioniert.
Beim Code aus der 2. Codebox stimmt noch was nicht.
Getestet hatte ich mit ca. 161.000 Items
Bei größeren Datenmengen wird das Ganze sehr langsam.
Auch dank deiner Unterstützung bin nun zu der Erkenntnis gelangt, dass ich die Information (Dateiendung) wohl doch mit in meine Datei als zusätzliche Infomation mit ablegen muss, eben aus Gründen der Performance. Ich werde das ganze wohl als Zahl mit abspeichern, da die Sortierung nach Zahl dann wesentlich schneller ist. Zuerst muss ich mir aber ein Konzept überlegen, wie ich beim Einlesen der Dateien (FindFirst) die Zuordnung einer Zahl pro Dateiendung hinbekomme.
Dieser Thread ist somit keine offene Frage mehr.
Danke an alle Beteiligten!
Für alle die es interessiert und ggf. nicht mit so großen Datenmengen hantieren müssen, nachfolgend der funktionierende Code, mit Anzeige von markierten Item(s).
Delphi-Quellcode:
if (odSelected in State) then begin
Canvas.Font.Color := clBlack;
Canvas.Brush.Color := clHighlight;
end
else begin
ListBox.Tag := 0;
for i := 1 to index do begin
if LowerCase(ExtractFileExt(ListBox.Items[i - 1])) <> LowerCase(ExtractFileExt(ListBox.Items[i])) then begin
ListBox.Tag := (ListBox.Tag + 1) mod 2;
end;
end;
if (ListBox.Tag = 0) and not (odSelected in State) then begin
ListBox.Canvas.Brush.color := clWhite;
end
else begin
if (ListBox.Tag = 1) and not (odSelected in State) then begin
ListBox.Canvas.Brush.color := $FCFDA5;
end;
end;
ListBox.Canvas.FillRect(Rect);
ListBox.Canvas.Font.Color := clBlack;
ListBox.Canvas.TextOut(Rect.Left, Rect.Top, ListBox.Items[Index]);
ListBox.Tag := index;
end;