Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TListView Zelle färben, BUG oder ein Fehler von mir? (https://www.delphipraxis.net/174587-tlistview-zelle-faerben-bug-oder-ein-fehler-von-mir.html)

tofse 30. Apr 2013 15:06

TListView Zelle färben, BUG oder ein Fehler von mir?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich möchte in einer TListView eine Zelle färben und verwende diesen Code
Code:
procedure TKabOpTerminManager.ListViewTermineCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if SubItem = 7 then
  begin
    Sender.Canvas.Brush.Color:=clRed;
  end
  else
  begin
    Sender.Canvas.Brush.Color:=$00F7F7F7;
  end;
end;
Die TListView hat als Color ebenfalls $00F7F7F7

Die Folge ist nun, dass alle Zellen mit SubItem >= 7 in rot gefärbt werden. Zum Testen habe ich mal eine andere Hintergrundfarbe genommen.
Somit unterscheidet sich nun also TListView.Color und Sender.Canvas.Brush.Color:=$00F7F7F7;
Damit funktioniert es wie gewünscht. Allerdings sollten ja die SubItems genauso eingefärbt werden, wie TListView.Color (außer halt bei SubItem=7) :?: :?: :?:

Was mache ich falsch?

Grüße
Christof

baumina 30. Apr 2013 15:13

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Sender.Canvas.Brush.Color:=TListView(Sender).Color ; ?

Ansonsten versteh ich die Frage nicht.

tofse 30. Apr 2013 15:17

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Zitat:

Zitat von baumina (Beitrag 1213547)
Sender.Canvas.Brush.Color:=TListView(Sender).Color ; ?

Äh ja, das entspricht dem, was ich geschrieben habe. Wenn ich es so verwende, werden alle Zellen ab SubItem>=7 in rot gefärbt, wie im Bildchen zu sehen ist.

Nur wenn ich z.B. Sender.Canvas.Brush.Color:=clGray verwende, dann sind alle Zellen außer der 7. in Grau. Aber es soll nicht in Grau sein, sondern eben TListView(Sender).Color

Klar ?????

baumina 30. Apr 2013 15:22

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Na dann hab ich es schon richtig verstanden, versuchs mal (wie ich bereits erwähnte) mit:

Delphi-Quellcode:
procedure TKabOpTerminManager.ListViewTermineCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
 begin
   if SubItem = 7 then
   begin
     Sender.Canvas.Brush.Color:=clRed;
   end
   else
   begin
     Sender.Canvas.Brush.Color:=TListView(Sender).Color;
   end;
 end;

tofse 30. Apr 2013 15:25

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Hallo,
wenn ich Deinen Code verwende
Code:
procedure TKabOpTerminManager.ListViewTermineCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
 begin
   if SubItem = 7 then
   begin
     Sender.Canvas.Brush.Color:=clRed;
   end
   else
   begin
     Sender.Canvas.Brush.Color:=TListView(Sender).Color;
   end;
 end;
dann sehen die Zellen ab SubItem >= 7 rot aus, wie im Bild zu sehen ist.

Verwende ich aber
Code:
procedure TKabOpTerminManager.ListViewTermineCustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
 begin
   if SubItem = 7 then
   begin
     Sender.Canvas.Brush.Color:=clRed;
   end
   else
   begin
     Sender.Canvas.Brush.Color:=clGray; // als Beispiel
   end;
 end;
Dann sehen alle Spalten grau aus (bis auf die 7.) Es soll aber nicht grau sein, sondern eigentlich TListView(Sender).Color, aber das funktioniert nicht :cry:

Bummi 30. Apr 2013 15:26

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
da läuft IMHO irgendetwas mit dem Setter von Brush.Color schief wenn
ListView.Color = gesetzter Farbe im CustomDrawSubItem ist.

Ich kann im Moment nur einen Workaround anbieten ...

Delphi-Quellcode:
begin
  if SubItem = 7 then
  begin
    Sender.Canvas.Brush.Color:=clRed;
  end
  else
  begin
    Sender.Canvas.Brush.Color:=$00F7F7F6; // entweder Wechsel erzwingen
    Sender.Canvas.Brush.Color:=$00F7F7F7;
    //oder auch das Handle "anfassen" Sender.Canvas.Brush.Handle:=   Sender.Canvas.Brush.Handle;
  end;

end;

tofse 30. Apr 2013 15:29

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Zitat:

Zitat von Bummi (Beitrag 1213554)
Sender.Canvas.Brush.Color:=$00F7F7F6; // entweder Wechsel erzwingen

Ah, das funktioniert. Der Benutzer bemerkt keinen Unterschied, und wenn ich das in 3 Jahren wieder anpacken muss, verstehe ich nicht, warum ich es so eingesetzt habe :shock:

Trotzdem Danke, dann muss es so gehen
Christof

sx2008 30. Apr 2013 15:38

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Zitat:

Zitat von tofse (Beitrag 1213556)
und wenn ich das in 3 Jahren wieder anpacken muss, verstehe ich nicht, warum ich es so eingesetzt habe :shock:

Dann füge doch einfach die URL dieses Threads als Kommentar in den Sourcecode ein.
In 3 Jahren kannst du hier alles noch schön nachlesen.
Die DP vergisst nichts (also meistens fast immer).

Bummi 30. Apr 2013 15:54

AW: TListView Zelle färben, BUG oder ein Fehler von mir?
 
Zitat:

Der Benutzer bemerkt keinen Unterschied ...
Du kannst durchaus die gleiche Farbe verwenden, nur zwischendurch einmal den "Setter durchputzen" ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 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