Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listview bestimte Zeilen faerben (https://www.delphipraxis.net/54915-listview-bestimte-zeilen-faerben.html)

lucius 13. Okt 2005 10:46


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:
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;
Aber irgendwie kriege ich das mit dem Aufruf nicht hin:
Delphi-Quellcode:
if Item.SubItems[1]='DVD' then
  ListViewCustomDrawSubItem(listview, ????, ????, FALSE);
Was kommt jetzt genau bei den Fragezeichen und stimmt der code ueberhaupt?
Danke im voraus.

MarcoWarm 13. Okt 2005 10:54

Re: Listview bestimte Zeilen faerben
 
Zitat:

Zitat von lucius
Delphi-Quellcode:
if Item.SubItems[1]='DVD' then
  ListViewCustomDrawSubItem(listview, ????, ????, FALSE);

Dieser Aufruf ist überflüssig, da das Listview das Ereignis selber aufruft, wenn die Subitems gezeichnet werden.

lucius 13. Okt 2005 11:04

Re: Listview bestimte Zeilen faerben
 
Ok aber irgendwie habe ich nen Fehler gemacht glaube ich er faerbt Sie nicht Rot.

Delphi-Quellcode:
Item.SubItems[1]='DVD'
Sitzte ich ueberhaupt in der richtigen Spalte?
0 ist doch die 1e Spalte oder?

marabu 13. Okt 2005 11:17

Re: Listview bestimte Zeilen faerben
 
Hallo lucius,

falsche Spalte, falsches Ereignis. Nach deiner Anforderung musst du mit OnCustomDrawItem arbeiten:

Delphi-Quellcode:
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;
Grüße vom marabu

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...

Achtzig 13. Okt 2005 11:24

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.

lucius 13. Okt 2005 11:32

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:

___________| 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] |
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;

marabu 13. Okt 2005 11:40

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:
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] |
marabu

lucius 13. Okt 2005 11:50

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?

lucius 13. Okt 2005 11:56

Re: Listview bestimte Zeilen faerben
 
Habs schon: statt Canvas.Brush.Color, Canvas.Font.Color


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz