Hi,
ich benutze folgenden Code, um jedes 2. Item einer ListView einzufärben:
Delphi-Quellcode:
procedure TForm1.lvTestCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if Odd(Item.Index) then
Sender.Canvas.Brush.Color := clSilver
else
Sender.Canvas.Brush.Color := clWindow;
end;
Zudem noch folgenden Code, um bestimmte SubItems einzufärben:
Delphi-Quellcode:
procedure TForm1.lvTestCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if SubItem = 3 then
begin
if Item.SubItems[SubItem - 1] = 'OK' then
Sender.Canvas.Font.Color := clGreen
else
Sender.Canvas.Font.Color := clRed;
end
else
Sender.Canvas.Font.Color := clWindowText;
end;
Das Problem ist jetzt, dass nach dem Einfärben des 2. SubItems die Einfärbung (clSilver, s.o) für diese Zeile aufhört und auch noch alle weiteren SubItems (grün) eingefärbt werden.
Warum ist das so? Ich habe im Code doch festgelegt, dass die Farbe wieder clWindowText (schwarz) sein soll, wenn es nicht das 2. SubItem ist.