Einzelnen Beitrag anzeigen

Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Listbox.OnDrawItem: wenn Dateiendung wechselt, andere Farbe

  Alt 12. Jun 2010, 12:07
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;
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat