@David: Weil dein Vorschlag nicht dem entspricht was er haben will,
Er will bei jeder Änderung der Dateiendung die Farbe wechseln und wenn du dir dein Bild anschaust dann entspricht das dem nicht wirklich
@juergen: Auf solche Sachen kommt man mit etwas Erfahrung relativ einfach
Leider klappts nicht, da je nach dem wie und wo hin ich scrolle anders markiert wird.
Mit unten stehendem Code funktionierts, der wird aber mit zunehmender Länge immer langsamer
Eine weitere Möglichkeit (2. Codebox) wäre es die Farbe des ersten gezeichneten Items nur bei diesem zu ermitteln (dies geschieht in der For schleife), dann wirds ein bisschen schneller allerdings brauchst du dann eine globale Variable (iToggleColor).
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control : TWinControl; Index : Integer;
Rect : TRect; State : TOwnerDrawState);
var
i : Integer;
begin
ListBox1.Tag := 0;
for i := 1 to index do
begin
if ExtractFileExt(ListBox1.Items[i - 1]) <> ExtractFileExt(ListBox1.Items[i]) then
begin
ListBox1.Tag := (ListBox1.Tag + 1) mod 2;
end;
end;
if ListBox1.Tag = 0 then
begin
ListBox1.Canvas.Brush.color := clWhite;
end
else
begin
ListBox1.Canvas.Brush.color := clGreen;
end;
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.Font.Color := clBlack;
ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
end;
Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control : TWinControl; Index : Integer;
Rect : TRect; State : TOwnerDrawState);
var
i : Integer;
begin
iToggleColor := 0;
if ListBox1.Tag > index then
begin
for i := 1 to index do
begin
if ExtractFileExt(ListBox1.Items[i - 1]) <> ExtractFileExt(ListBox1.Items[i]) then
begin
iToggleColor := (iToggleColor + 1) mod 2;
end;
end;
end
else
begin
if index > 0 then
begin
if ExtractFileExt(ListBox1.Items[index - 1]) <> ExtractFileExt(ListBox1.Items[index]) then
begin
iToggleColor := (iToggleColor + 1) mod 2;
end;
end;
end;
if iToggleColor = 0 then
begin
ListBox1.Canvas.Brush.color := clWhite;
end
else
begin
ListBox1.Canvas.Brush.color := clGreen;
end;
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.Font.Color := clBlack;
ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
ListBox1.Tag := index;
end;