![]() |
ListView einzelnes Item färben
Hallo,
ich hät da mal wieder ein Problem unzwar färbe ich meine Items in TLIstView grün. Alerdings möchte ich bei einer Spalte Rot verwenden wenn dort "Ja - ..." und nicht "Nein" drinne steht. Also habe ich folgendes versucht, was wieder einmal nicht klappt.
Delphi-Quellcode:
procedure TMainFrm.LViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); var i,j: integer; begin j := 1; with Sender.Canvas do begin if SubItem = 1 then Font.Color := clGreen; if SubItem = 2 then Font.Color := clGreen; if SubItem = 8 then Font.Color := clGreen; end; for i := 0 to LView.Items.Count-1 do j := Pos('Ja',LView.Items.Item[i].Caption); if (j <> 0) then if SubItem = 7 then Sender.Canvas.Font.Color := clRed else Sender.Canvas.Font.Color := clGreen; end; |
Re: ListView einzelnes Item färben
Hallo Alexander,
müsste dein Code nicht eher so aussehen (ungetestet)?
Delphi-Quellcode:
Grüße vom marabu
procedure TMainFrm.LViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin with Sender.Canvas do begin case SubItem of 1, 2, 8: Font.Color := clGreen; 7: begin if Uppercase(Item.Caption) = 'JA' then Font.Color := clGreen else Font.Color := clRed; end; // else Font.Color := clSaved; end; end; end; |
Re: ListView einzelnes Item färben
Ne, geht leider nicht. Wird ja als auch nein rot dargestellt.
|
Re: ListView einzelnes Item färben
Zitat:
Oder sehe ich das eben falsch? |
Re: ListView einzelnes Item färben
Ne, er prüft das doch in der 7. Spalte oder nicht?
Schließlich ist die if Abfrage und das Uppercase an der stelle
Delphi-Quellcode:
Oder ich versteh den Code nicht. Kann ja auch sein. ;)
case SubItem of
... 7: begin if Uppercase(Item.Caption) = 'JA' then Font.Color := clGreen else Font.Color := clRed; end; ... |
Re: ListView einzelnes Item färben
Ich färbe die Spalte 7 in Abhängigkeit vom Inhalt der Spalte 0 (Caption) - so wie ich es im Original-Code gesehen habe. Sharky hat aber eher auf den Text geachtet und jetzt musst du entscheiden, welcher Inhalt maßgeblich für das Einfärben sein soll.
marabu |
Re: ListView einzelnes Item färben
Ups ne dann hab ich mich falsch ausgedrückt. Das Ja oder Nein steht auch
in der Spalte 7. |
Re: ListView einzelnes Item färben
Zitat:
marabu verwendet das Ereigniss ![]() Jetzt prüft er welches SubItem gezeichnet wird 1/2/8 oder 7. Wenn die SubItem 1/2/8 gezeichnet werden setzt er deren Fontfarbe auf grün. Wenn SubItem 7 (was übrigens die achte Spalte ist) gezeichnet wird prüft er ob im Item (Spalte 1, kein SubItem) das Wort "JA" steht und setzt dann die Farbe auf grün und ansonsten auf rot. Da Du jedoch den Inhal eines SubItems (Spalte 7) prüfe möchtest musst Du auch den Inhalt des SubItems und nicht des Items prüfen ;-) Hier mal der Code wie er für deinen Fall gehen sollte.
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: integer; State: TCustomDrawState; var DefaultDraw: boolean); begin with Sender.Canvas do case SubItem of 1, 2, 8: Font.Color := clGreen; 6: // Wenn Spalte 7 gezeichnet wird dann... if Uppercase(Item.SubItems[SubItem - 1]) = 'JA' then // In Spalte 7 steht "JA".. Font.Color := clGreen else Font.Color := clRed; else Font.Color := clBlack; // Für alle andere SubItems diese Farbe end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz