Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TListView Zeilenfarbe mit "CustomDrawItem" ändern (https://www.delphipraxis.net/166127-tlistview-zeilenfarbe-mit-customdrawitem-aendern.html)

Mazen 31. Jan 2012 11:45

TListView Zeilenfarbe mit "CustomDrawItem" ändern
 
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;

Sir Rufo 31. Jan 2012 12:04

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern
 
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?

DeddyH 31. Jan 2012 12:12

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern
 
Eben, man müsste also den Fehlercode in den Daten ablegen (TListItem.Data) und beim Zeichnen wieder auswerten.

Mazen 31. Jan 2012 15:54

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern
 
Hm, kann ich so jetzt noch nicht viel mit anfangen. Sitz da aber auch grade nicht vor...
Werd mir das morgen mal anschauen ;)
Danke

Mazen 2. Feb 2012 09:50

AW: TListView Zeilenfarbe mit "CustomDrawItem" ändern
 
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 ;)


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