![]() |
ListView SubItem Background Color
Guten Abend zusammen,
ich benutze zur Zeit ein TListView mit 3 SubItems. Nun möchte ich, wenn der Text vom mittleren SubItem = "Test" ist, dass dieses eine andere Farbe bekommt. Allerdings bekomme ich es nicht hin. Hier mal mein aktueller Stand:
Delphi-Quellcode:
So wie es jetzt ist, werden jedoch alle 3 SubItems mit der Farbe $CCFFCC versehen.
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin if SubItem = 1 then begin if Item.SubItems.Strings[1] = 'Test' then begin Sender.Canvas.Brush.Color := TColor($CCFFCC); end else begin Sender.Canvas.Brush.Color := TColor($CCCCFF); end; end else begin Sender.Canvas.Brush.Color := clWindow; end; end; Wenn ich auf SubItem = 2 prüfe, sind die letzten beiden in der Farbe. Und bei SubItem = 3 nur das Letzte. Ich verstehe den Zusammenhang von SubItem nicht. Ich bin davon ausgegangen, das SubItem das aktuelle SubItem ist und das bei 3 SubItems das Event 3 mal aufgerufen wird. Deshalb war meine Überlegung, dass wenn SubItem = 1 ist (erstes SubItem = Index 0) nur das Mittlere eine andere Farbe bekommt. Aber dem ist nicht so. Könntet ihr mich aufklären? |
AW: ListView SubItem Background Color
Die eingestellte Farbe bleibt erhalten und clWindow greift nicht (weshalb, das ist mir auch unklar). Wenn man es auf irgendetwas ändert und danach zurück auf clWindow, dann funktionierts:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin case SubItem of 1: Sender.Canvas.Brush.Color := clRed; 2: Sender.Canvas.Brush.Color := clLime; 3: Sender.Canvas.Brush.Color := clBlue; else begin Sender.Canvas.Brush.Color := clPurple; Sender.Canvas.Brush.Color := clWindow; end; end; // case SubItem of end; |
AW: ListView SubItem Background Color
wie sieht es aus wenn man PtInRect verwendet und dann die Farbe setzt ?
gruss |
AW: ListView SubItem Background Color
So wirds gemacht:
Delphi-Quellcode:
Du musst nur aufpassen:
procedure TF_DevelopTest.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin if ((SubItem = 2) and (Item.SubItems.Count > 1)) then begin if (Item.SubItems.Strings[1] = 'Test') then begin Sender.Canvas.Brush.Color := $CCFFCC; end else begin Sender.Canvas.Brush.Color := $CCCCFF; end; end else begin Sender.Canvas.Brush.Color := $000000; Sender.Canvas.Brush.Color := TListView(Sender).Color; end; end; SubItem fängt bei 1 an, dass heisst, dass Dein mittlerer Eintrag von 3 SubItems der Wert 2 ist, aber die Strings von 0 ab gezählt werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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 by Thomas Breitkreuz