![]() |
Einzelne Zelle in TListView färben, Denkfehler?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo an alle :).
Gegeben sei dieser Code:
Delphi-Quellcode:
Was erwartet man? Doch eigentlich, dass nur die Zelle mit Zeilenindex=1 und Spaltenindex=1 grün gefärbt wird. Was passiert stattdessen? Es werden alle Zellen mit Zeilenindex=1 und Spaltenindex>=1 gefärbt! Siehe Bild im Anhang. Das Verhalten ist im D5 und XE2 identisch.
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin if (SubItem = 1) AND (Item.Index = 1) then Sender.Canvas.Brush.Color:= clGreen (* else Sender.Canvas.Brush.Color:= clWindow;*) end; Also hab ich mit dem auskommentierten
Delphi-Quellcode:
-Zweig und CustomDrawItem und ähnlichen Sachen rumgespielt, aber nichts führt zum gewünschten Ergebnis. Hab ich einen Denkfehler? Wenn ja, kann mir den bitte jemand zeigen?
else
Was ich nicht möchte, ist ein OwnerDraw=True, weil dadurch das Theming flöten geht. MfG Dalai |
AW: Einzelne Zelle in TListView färben, Denkfehler?
Versuch es mal so:
Delphi-Quellcode:
oder so
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin if (SubItem = 1) AND (Item.Index = 1) then Sender.Canvas.Brush.Color := clGreen; Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color + 1; Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color - 1; end;
Delphi-Quellcode:
oder so
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin if (SubItem = 1) AND (Item.Index = 1) then Sender.Canvas.Brush.Color := clGreen else Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color + 1; Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color - 1; end; end;
Delphi-Quellcode:
Ich hab mich mit den Zeilen
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin if Item.Index = 1 then case SubItem of 1: Sender.Canvas.Brush.Color := clGreen; else Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color + 1; Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color - 1; end; end;
Delphi-Quellcode:
kurz ausweinender gesetzt, aber nicht wirklich rausgefunden was sie bewirken. Auf jeden Fall korrigieren sie wieder die Brush Farbe.
Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color + 1;
Sender.Canvas.Brush.Color:= Sender.Canvas.Brush.Color - 1; |
AW: Einzelne Zelle in TListView färben, Denkfehler?
:shock: Das funktioniert. Verstehen tue ich das aber nicht. Auch wenn ich im Quelltext nichts derartiges erkenne, so ist es ja meist so, dass der Setter nur arbeitet, wenn der reinkommende Wert abweicht (mache ich auch so). Demzufolge wirkt das Setzen von
Delphi-Quellcode:
nicht, weil es bereits clWindow ist. Aber warum wird dann mit clGreen gezeichnet? :gruebel:
Brush.Color:=clWindow
MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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