Ich habe eine ListView-Komponente und möchte einen Eintrag durchstreichen [fsStrikeOut] wenn ein anderer Eintrag in der selben Zeile (SubItems[3]) den Inhalt "true" hat.
Komischerweise funktioniert der Eintrag:
Code: Alles auswählen
Sender.Canvas.Font.Style:=[fsBold, fsStrikeOut];
Will ich dagegen dem Eintrag eine andere Farbe verpassen,
Code: Alles auswählen
Sender.Canvas.Brush.Color :=clRed;
Was muß ich machen damit ich den Style von einem Eintrag ändern kann?
Ich habe auch schon nach Sender.Canvas.Font.Style:=[fsBold, fsStrikeOut];
ein Sender.Canvas.Refresh bzw. ListView1.Canvas.Refresh eingebaut, jedoch ohne
Erfolg.
Gruß
Michael
Code: Alles auswählen
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
const
cStripe = $CCFFCC;
begin
ListView1.BeginUpdate;
if Odd(Item.Index) then Sender.Canvas.Brush.Color := cStripe
else Sender.Canvas.Brush.Color := clWindow;
// Hinweis: Item.SubItems[2] ist visible:=false und enthält die Farbe
// Hinweis: Item.SubItems[3] ist visible:=false und ist true wenn IP nicht angepingt werden soll
if SubItem = 1 then begin
Sender.Canvas.Font.Color := StringToColor(Item.SubItems[2]);
if ListView1.Items[Item.Index].SubItems[3]='true' then begin
Sender.Canvas.Font.Style:=[fsBold, fsStrikeOut]; // <- das geht nicht
Sender.Canvas.Brush.Color :=clRed; // <- das geht
ListView1.Canvas.Refresh; //Sender.Canvas.Refresh;
end;
end;
if SubItem = 2 then
ListView1.Canvas.Font.Color := StringToColor(Item.SubItems[2]);
ListView1.EndUpdate;
end;