Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Item in TListView einfärben (https://www.delphipraxis.net/47610-item-tlistview-einfaerben.html)

BastardOp 13. Jun 2005 21:00


Item in TListView einfärben
 
Hi

ich wollte mal frage ob und wie es geht das ich ein einzelnes Item in eine TListView in einer bestimmten Farbe einfärb wenn ein bestimmter Inhalt vorliegt.
Habe es bereits hinbekommen jede zweite Zeile einzufärben.
ich hab meine TListView auf vsRecord

Ich hoffe ihr könt mir helfen

MfG
BastardOp

Treffnix 13. Jun 2005 21:03

Re: Item in TListView einfärben
 
Wenn du jedes 2. Item einfärben kannst, was hindert dich daran genau das gleiche nur mit einem einzigen zu machen? :gruebel:

BastardOp 13. Jun 2005 21:06

Re: Item in TListView einfärben
 
Im mom kann ich nur jede 2. Zeile einfärben aber ich will jetzte nur einzellne Zellen einfärben wen in denen "ja" steht

Treffnix 13. Jun 2005 21:08

Re: Item in TListView einfärben
 
schau mal http://www.delphipraxis.net/internal...=148033#148033

BastardOp 14. Jun 2005 16:52

Re: Item in TListView einfärben
 
also ich habe mir mal die links angeschyut aber werde nich wirklich schlau draus.

Delphi-Quellcode:
procedure TForm1.ListView6CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
  var Item2 : TListItems;

  begin
  Item2 := ListView6.Items;
with ListView6.Canvas.brush do
  begin
   
    if string(Item2) = 'ja' then
    begin
      Color := clred;
    end;
    if string(Item2) = 'nein' then
    begin
      Color := clBlack;
    end;
  end;
end;
den code habe ich im mom nur leider färbt sich damit nichts zu vor hatte ich keine 2. if anweisung sondern ein normales else drin und da wurden alle zeilen bei mir schwarz gemacht. Was mache ich flasch?


MfG
BastardOp

Treffnix 14. Jun 2005 17:12

Re: Item in TListView einfärben
 
:gruebel: Und wie kommst du auf den Code?

Du kannst nicht einfach TListitems auf String casten. Ausserdem ist mir schleierhaft, was du damit überhaupt willst. Du bekommst das aktuelle Item + Subitem doch als Parameter.

Versuchs mal so:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
with ListView1.Canvas.brush do
  begin
    if (Item.SubItems[Subitem] = 'ja') then
    begin
      Color := clred;
    end
    else
    begin
      Color := clBlack;
    end;
  end;
end;
Ist ungetestet, könnte aber funktionieren ;)

*edit* da fehlte noch ein "s" :oops:

marabu 14. Jun 2005 17:21

Re: Item in TListView einfärben
 
Kleiner Verbesserungsvorschlag:

Delphi-Quellcode:
with Sender.Canvas.Brush do
  if Item.SubItems[Pred(SubItem)] = 'ja'
    then Color := clred
    else Color := clBlack;
Später müsste man dann noch State auswerten, damit das ganze schöner aussieht.

Grüße vom marabu

BastardOp 14. Jun 2005 17:22

Re: Item in TListView einfärben
 
thx der code funzt soweit auch ganz gut aber is nicht ganz das was ich möchte denn ich will das nur die zelle in der ja bzw. nein steht gefärbt wird nun wird immer alles außer die 1. splate gefärbt.

wie geht des?

marabu 14. Jun 2005 17:25

Re: Item in TListView einfärben
 
Wenn der Code in OnCustomDrawSubItem steht, dann wird nur die Zelle gefärbt - bei mir.

marabu

Treffnix 14. Jun 2005 17:28

Re: Item in TListView einfärben
 
Zitat:

Zitat von marabu
Kleiner Verbesserungsvorschlag:

Delphi-Quellcode:
with Sender.Canvas.Brush do
  if Item.SubItems[Pred(SubItem)] = 'ja'
    then Color := clred
    else Color := clBlack;
Später müsste man dann noch State auswerten, damit das ganze schöner aussieht.

Grüße vom marabu

Pred? Ist SubItem nicht der Index?

BastardOp 14. Jun 2005 17:37

Re: Item in TListView einfärben
 
Liste der Anhänge anzeigen (Anzahl: 1)
also so schaut der code aus

Delphi-Quellcode:
procedure TForm1.ListView6CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
with ListView6.Canvas.brush do
  begin
    if (Item.SubItems[5] = 'ja') then
    begin
      Color := clgreen;
    end ;
    if (Item.SubItems[5] = 'nein') then
    begin
      Color := clred;
    end ;
  end;
    end;
end.

und so schaut das pic in dem fall aus

marabu 14. Jun 2005 17:50

Re: Item in TListView einfärben
 
Einfache Erklärung: das ist nicht mein Code und auch nicht der von treffnix. Du fragst nur SubItem[5] ab und steuerst damit die Farbunterlegung für alle SubItems.

Wenn du nur die Spalte mit 'ja' und 'nein' einfärben willst, dann probiere es so:

Delphi-Quellcode:
with Sender.Canvas.Brush do
  if Item.SubItems[5] = 'ja' then
    if SubItem = 6 
      then Color := clgreen
      else Color := clBlack
  else
  if Item.SubItems[5] = 'nein' then
    if SubItem = 6 
      then Color := clred
      else Color := clBlack
  else
    Color := clBlack;
marabu

@treffnix: Scheint so als wäre Subitem = Succ(index).

BastardOp 14. Jun 2005 18:18

Re: Item in TListView einfärben
 
thx so funzt es schonmal
aber ich habe ja zuvor jede 2. zeile grau eingefärbt wegen der übersichtlich keit nun is da prob das die grau einfärbung ja überschrieben wird
was kann man da amachen

/Edit also irgenwie da wo else steht immer die Farbe die ie jeweilige Zeile vorher hat

marabu 14. Jun 2005 18:44

Re: Item in TListView einfärben
 
Du könntest die Farben Rot und Grün etwas abdunkeln, wenn sie auf einer grauen Zeile liegen.

marabu

BastardOp 14. Jun 2005 18:52

Re: Item in TListView einfärben
 
kann ihm ja auch sagen das wenn er auf einer grauen zelle liegt er bei else eine grau farbe nehmen soll. Aber ich weiß leider net wie ich nun raus bekomm ob er auf einer grauen zelle ist oder nicht

marabu 14. Jun 2005 19:01

Re: Item in TListView einfärben
 
Odd(item.index) bedeutet bei dir "Grau"

marabu

BastardOp 14. Jun 2005 19:08

Re: Item in TListView einfärben
 
sorry das ich schon wieder frage aber wie sieht dafür ein code schniupsel aus? bin im mom grad net ganz auf der höhe sorry

BastardOp 14. Jun 2005 19:18

Re: Item in TListView einfärben
 
habs nun hinbekommen allerdings wenn ich die selbe Frabe wähle wie die standart farbe des ListViews wird dies komischweiße ignoriert


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