AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView einzelnes Item färben

Ein Thema von citybreaker · begonnen am 27. Jul 2005 · letzter Beitrag vom 29. Jul 2005
Antwort Antwort
citybreaker
(Gast)

n/a Beiträge
 
#1

ListView einzelnes Item färben

  Alt 27. Jul 2005, 20:52
Hallo,
ich hät da mal wieder ein Problem unzwar färbe ich meine Items
in TLIstView grün.

Alerdings möchte ich bei einer Spalte Rot verwenden wenn dort "Ja - ..."
und nicht "Nein" drinne steht.

Also habe ich folgendes versucht, was wieder einmal nicht klappt.

Delphi-Quellcode:
procedure TMainFrm.LViewCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var i,j: integer;
begin
  j := 1;

  with Sender.Canvas do begin
    if SubItem = 1 then Font.Color := clGreen;
    if SubItem = 2 then Font.Color := clGreen;
    if SubItem = 8 then Font.Color := clGreen;
  end;

  for i := 0 to LView.Items.Count-1 do
     j := Pos('Ja',LView.Items.Item[i].Caption);

  if (j <> 0) then
    if SubItem = 7 then Sender.Canvas.Font.Color := clRed
    else Sender.Canvas.Font.Color := clGreen;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: ListView einzelnes Item färben

  Alt 27. Jul 2005, 21:24
Hallo Alexander,

müsste dein Code nicht eher so aussehen (ungetestet)?

Delphi-Quellcode:
procedure TMainFrm.LViewCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  with Sender.Canvas do begin
    case SubItem of
      1, 2, 8:
        Font.Color := clGreen;
      7:
        begin
          if Uppercase(Item.Caption) = 'JA
            then Font.Color := clGreen
            else Font.Color := clRed;
        end;
      // else Font.Color := clSaved;
    end;
  end;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#3

Re: ListView einzelnes Item färben

  Alt 27. Jul 2005, 21:37
Ne, geht leider nicht. Wird ja als auch nein rot dargestellt.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: ListView einzelnes Item färben

  Alt 27. Jul 2005, 21:49
Zitat von citybreaker:
Ne, geht leider nicht. Wird ja als auch nein rot dargestellt.
Hmmm... wenn ich den Code von marabu richtig lese wird dort ja "nur" geprüft ob in der ersten Spalte (item.caption) ein Ja oder Nein steht. Wenn es bei dir aber in einem SubItem steht musst Du das if UpperCase ... dahingehen ändern.

Oder sehe ich das eben falsch?
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#5

Re: ListView einzelnes Item färben

  Alt 28. Jul 2005, 20:17
Ne, er prüft das doch in der 7. Spalte oder nicht?
Schließlich ist die if Abfrage und das Uppercase
an der stelle
Delphi-Quellcode:
  case SubItem of
   ...
      7:
        begin
          if Uppercase(Item.Caption) = 'JA'
            then Font.Color := clGreen
            else Font.Color := clRed;
        end;
   ...
Oder ich versteh den Code nicht. Kann ja auch sein.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: ListView einzelnes Item färben

  Alt 28. Jul 2005, 20:21
Ich färbe die Spalte 7 in Abhängigkeit vom Inhalt der Spalte 0 (Caption) - so wie ich es im Original-Code gesehen habe. Sharky hat aber eher auf den Text geachtet und jetzt musst du entscheiden, welcher Inhalt maßgeblich für das Einfärben sein soll.

marabu
  Mit Zitat antworten Zitat
citybreaker
(Gast)

n/a Beiträge
 
#7

Re: ListView einzelnes Item färben

  Alt 28. Jul 2005, 20:35
Ups ne dann hab ich mich falsch ausgedrückt. Das Ja oder Nein steht auch
in der Spalte 7.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: ListView einzelnes Item färben

  Alt 29. Jul 2005, 07:12
Zitat von citybreaker:
... Oder ich versteh den Code nicht. Kann ja auch sein.
Ich versuche es mal zu erklären.
marabu verwendet das Ereigniss Delphi-Referenz durchsuchenOnCustomDrawSubItem. Dies wird beim zeichen von jedem einzelen SubItem aufgerufen.
Jetzt prüft er welches SubItem gezeichnet wird 1/2/8 oder 7.
Wenn die SubItem 1/2/8 gezeichnet werden setzt er deren Fontfarbe auf grün.
Wenn SubItem 7 (was übrigens die achte Spalte ist) gezeichnet wird prüft er ob im Item (Spalte 1, kein SubItem) das Wort "JA" steht und setzt dann die Farbe auf grün und ansonsten auf rot.

Da Du jedoch den Inhal eines SubItems (Spalte 7) prüfe möchtest musst Du auch den Inhalt des SubItems und nicht des Items prüfen

Hier mal der Code wie er für deinen Fall gehen sollte.
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: integer; State: TCustomDrawState; var DefaultDraw: boolean);
begin
  with Sender.Canvas do
    case SubItem of
      1, 2, 8:
        Font.Color := clGreen;
      6: // Wenn Spalte 7 gezeichnet wird dann...
        if Uppercase(Item.SubItems[SubItem - 1]) = 'JAthen // In Spalte 7 steht "JA"..
          Font.Color := clGreen
        else
          Font.Color := clRed;
      else Font.Color := clBlack; // Für alle andere SubItems diese Farbe
    end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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