![]() |
Listview bestimte Zeilen faerben
Hallo zusammen ich habe ne Listview mit 3 Spalten, in der 2e Spalte stehen die Werte VCD, SVCD und DVD.
Jetzt moechte ich das jede Zeile wo DVD drin steht rot markiert wird. Habe auch schon was code:
Delphi-Quellcode:
Aber irgendwie kriege ich das mit dem Aufruf nicht hin:
procedure TForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: boolean); begin if (Item.SubItems[1]='DVD') then Sender.Canvas.Brush.Color:=clRed; end;
Delphi-Quellcode:
Was kommt jetzt genau bei den Fragezeichen und stimmt der code ueberhaupt?
if Item.SubItems[1]='DVD' then
ListViewCustomDrawSubItem(listview, ????, ????, FALSE); Danke im voraus. |
Re: Listview bestimte Zeilen faerben
Zitat:
|
Re: Listview bestimte Zeilen faerben
Ok aber irgendwie habe ich nen Fehler gemacht glaube ich er faerbt Sie nicht Rot.
Delphi-Quellcode:
Sitzte ich ueberhaupt in der richtigen Spalte?
Item.SubItems[1]='DVD'
0 ist doch die 1e Spalte oder? |
Re: Listview bestimte Zeilen faerben
Hallo lucius,
falsche Spalte, falsches Ereignis. Nach deiner Anforderung musst du mit OnCustomDrawItem arbeiten:
Delphi-Quellcode:
Grüße vom marabu
procedure TMainForm.ListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin if Item.SubItems[1] = 'DVD-R' then Sender.Canvas.Brush.Color := clRed else Sender.Canvas.Brush.Color := clWindow; end; Nachtrag: erste sichtbare Spalte ist die Item.Caption und der Index für die SubItems läuft ab 0. Die zweite sichtbare Spalte ist dann SubItem[0], falls du die ItemCaption nicht schon berücksichtigt hast... |
Re: Listview bestimte Zeilen faerben
Was die ????-Parameter bedeuten beantwortet sich eigendlich von selbst (Sender,Item,State,DefaultDraw).
Wenn Du nicht willst, das die Komponente den Text einträgt - also weiterzeichnet - kannst Du DefaultDraw auf False setzen. State bestimmt den aktuellen Status (cdsSelected..cdsIndeterminate). Wenn zB. eine Zeile selektiert ist, wird cdsSelected übergeben (nicht von Dir sondern von der TListView-Komponente, wie MarcoWarm schon erwähnte). Eine selektierte Zeile hat normalerweise einen blauen Hintergrund. |
Re: Listview bestimte Zeilen faerben
Hallo marabu, also irgendwie klapt das nicht, ich habe das in einer Schleife verarbeitet und ich moechte durch alle Items gehen bis in Spalte 2 'DVD' gefunden wird.
Zitat:
Delphi-Quellcode:
procedure TMainForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: boolean); var i: integer; begin for i := 0 to listview.Items.Count -1 do begin if listview.Items[i].SubItems[1] = 'DVD' then Sender.Canvas.Brush.Color := clRed else Sender.Canvas.Brush.Color := clWindow end; end; |
Re: Listview bestimte Zeilen faerben
Gib einfach mal meinen Code über den Objektinspektor beim OnCustomDrawItem-Event deiner ListView ein und schau dir das Ergebnis an. Deaktiviere vorher noch deinen Code bei OnCustomDrawSubItem. Und wenn du Semigrafik oder Tabellen in deinem Beitrag verwendest, dann innerhalb von pre tags (natürlich in eckigen Klammern.
Code:
marabu
So:
| Spalte 1 | Spalte 2 | Spalte 3 | Items[0] > | Caption | SubItems[0] | SubItems[1] | Items[1] > | Caption | SubItems[0] | SubItems[1] | Items[2] > | Caption | SubItems[0] | SubItems[1] | |
Re: Listview bestimte Zeilen faerben
Es hat geklapt, ging einfacher wie ich dachte, wieder was gelernt und nicht zu Tief graben :P
Danke marabu, geht sowas auch mit der Font Farbe statt ZeilenFarbe? |
Re: Listview bestimte Zeilen faerben
Habs schon: statt Canvas.Brush.Color, Canvas.Font.Color
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 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