AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TListView Zeilenfarbe mit "CustomDrawItem" ändern
Thema durchsuchen
Ansicht
Themen-Optionen

TListView Zeilenfarbe mit "CustomDrawItem" ändern

Ein Thema von Mazen · begonnen am 31. Jan 2012 · letzter Beitrag vom 2. Feb 2012
Antwort Antwort
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#1

TListView Zeilenfarbe mit "CustomDrawItem" ändern

  Alt 31. Jan 2012, 12:45
Hab nochmal eine Frage zum TListView...

Und zwar gehts jetzt dadrum bestimmt Zeilen im ListView zu färben. Ich habe gelesen das das mit dem Event "CustomDrawItem" des ListView gemacht werden soll. Allerdings funktioniert das bei mir nicht.
Das Prinzip ist folgendes:

Ich habe in meiner "Hauptfunktion" eine Schleife mit der der ListView gefüllt wird. Meine Hoffnung war das das Event "CustomDrawItem" jedesmal aufgerufen wird wenn li.Caption := '...' ausgeführt wird. Bei mir ist es aber so das die Schleife erstmal komplett durchläuft, und erst danach das Event ausgeführt wird (natürlich genausoft wie auch li.Caption aufgerufen wurde, aber das nützt mir nichts, da ich bei Laufzeit in der Schleife eine Variable setze und diese im Event abgefragt wird. Nur das ist natürlich nutzlos wenn li.Caption und das Event nicht abwechselnd aufgerufen werden.

Mein Code im Event sieht so aus:

Code:
  if fehlercode = '1 ' then
  begin
    Sender.Canvas.Font.Color := clRed;
    DefaultDraw := True;
  end
  else if fehlercode = '2 ' then
  begin
    Sender.Canvas.Font.Color := clGreen;
    DefaultDraw := True;
  end
  else if fehlercode = '1 2 ' then
  begin
    Sender.Canvas.Font.Color := clBlue;
    DefaultDraw := True;
  end else
  begin
    Sender.Canvas.Font.Color := clDefault;
    DefaultDraw := True;
  end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern

  Alt 31. Jan 2012, 13:04
Mal anders gefragt:

So eine Komponente (z.B. TListView) wird ja immer wieder neu gezeichnet, auch wenn du keine Daten zuweist.
Und dann wird auch logischerweise CustomDrawItem aufgerufen.

Wie soll die Methode denn dann wissen, wie sie zeichnen soll?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern

  Alt 31. Jan 2012, 13:12
Eben, man müsste also den Fehlercode in den Daten ablegen (TListItem.Data) und beim Zeichnen wieder auswerten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#4

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern

  Alt 31. Jan 2012, 16:54
Hm, kann ich so jetzt noch nicht viel mit anfangen. Sitz da aber auch grade nicht vor...
Werd mir das morgen mal anschauen
Danke
  Mit Zitat antworten Zitat
Mazen

Registriert seit: 6. Okt 2011
66 Beiträge
 
Delphi 7 Professional
 
#5

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern

  Alt 2. Feb 2012, 10:50
Soo... da bin ich wieder...
Also ich bin schon ein gutes Stück weiter.
Allerdings macht er mit alle Zeilen rot, auch wenn "fehler := false" ist... (fehler ist vom Typ Boolean)
Schauts euch mal an, hier der Teil wo ich zeichne:

Code:
li := ListView1.Items.Add;
      li.Data := Pointer(fehler);
      li.Caption := kunde;
      li.SubItems.Add(hz[0]);
      li.SubItems.Add(hz[1]);
      li.SubItems.Add(hz[2]);
      li.SubItems.Add(erg);
und hier die "Auswertung"

Code:
procedure TfrmZentralen.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Boolean(Item.Data) = true then
  begin
    Sender.Canvas.Font.Color := clRed;
    DefaultDraw := True;
  end
  else
  begin
    Sender.Canvas.Font.Color := clDefault;
    DefaultDraw := True;
  end;
end;
Edit: Asche auf mein Haupt... Ich hab im Vorfeld einfach "fehler" falsch gesetzt :/
Dann kann dieser Thread auch geschlossen werden, Danke euch beiden

Geändert von Mazen ( 2. Feb 2012 um 11:31 Uhr)
  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 18:43 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