Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listview zeilen faerben(nicht OnCustomDrawItem) (https://www.delphipraxis.net/57709-listview-zeilen-faerben-nicht-oncustomdrawitem.html)

lucius 25. Nov 2005 13:08


Listview zeilen faerben(nicht OnCustomDrawItem)
 
Hallo Delphianer,

Ich habe einen kleines Problem.
Der folgende Code wird korrekt ausgefuehrt aber die Zeilen werden nicht Rot gefaerbt in der Listview.
Es ist keine Vituelle Listview.
Delphi-Quellcode:
for m:=y.Count -10 downto 0 do
  begin
  if not x.IndexOf(y.Strings[m]) > -1 then
     w.Add(y.Strings[m]);
     Listview.Items.Item[m].ListView.Canvas.Font.Color := clRed; <-------
  end;
Koennt ihr mir bitte helfen?
Danke im voraus.

Bernhard Geyer 25. Nov 2005 13:15

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Dein Logikansatz ist falsch.
Das Canvas das du verwendest ist jedesmal das gleiche und die Properties werden beim Neuzeichnen des Listviews überbügeln.

Also entwerder Leistungsfähigers Control das sowas unterstützt (z.B. Kostenpflichtig TElTreeStringGrid) oder OwnerDraw.

lucius 25. Nov 2005 13:19

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Hi Bernhard, OwnerData muss bei mit auf False bleiben wel es keine Virtuelle Liste ist.
Oder verstehe ich dich falsch?
Gibt es eine andere Loesung?

Gruss Lucius.

marabu 25. Nov 2005 17:54

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Hi Lucius,

das Einfärben ist kein Problem - hier wechselt die Zeilenfarbe alternierend:

Delphi-Quellcode:
procedure TDemoForm.ListViewCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Odd(Item.Index)
    then Sender.Canvas.Font.Color := clMaroon
    else Sender.Canvas.Font.Color := clBlue;
end;
ListView.OwnerDraw bleibt dabei FALSE - OwnerData bleibt so, wie du es brauchst und hat nichts mit dem Einfärben zu tun.

Grüße vom marabu

lucius 25. Nov 2005 18:01

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Herzlichen Dank marabu,

Ich werde es sofort probieren.

ps: Hast du meine pm bekommen?

Gruss Lucius.

lucius 25. Nov 2005 18:09

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Marabu, dein Code klappt wunderbar aber ich moechte ja nur das wenn es neue Eintraege gibt das die Rot oder Blau gefaerbt werden, sodas der User sieht welche neu sind in der Liste.
Delphi-Quellcode:
procedure TDemoForm.UpdateClick(Sender: TObject);

for m:=y.Count -10 downto 0 do
  begin
  if not x.IndexOf(y.Strings[m]) > -1 then
     w.Add(y.Strings[m]);
                    <------ was muesste denn hier rein?
  end;

...
Gruss Lucius..

marabu 25. Nov 2005 18:56

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Hi Lucius,

die Farbsteuerung muss in der CustomDrawItem()-Routine vorgenommen werden, nicht in der Update-Routine. An der von dir bezeichneten Stelle kannst du nur einen Merker setzen.

Wenn die Neuzugänge lückenlos zusammen stehen, dann reicht es, wenn du dir deren Anzahl merkst (NewsCount) und später in CustomDrawItem() prüfst, ob Item.Index < NewsCount ist oder nicht. Kriterium ist also die Position in der Listview.

Wenn die Neuzugänge Lücken aufweisen, dann solltest du bei jedem Eintrag einen timestamp mitführen und dir den Zeitpunkt merken, ab dem ein Eintrag als neu zu gelten hat. So arbeitest du mit der Zeit als Kriterium.

Dein eigener Code, der hier zu sehen ist, arbeitet mit membership als Kriterium. Du prüfst, ob ein Eintrag bereits in einer Vergleichsliste enthalten ist.

Was zuletzt die beste Lösung ist, das musst du entscheiden.

marabu

lucius 25. Nov 2005 19:02

Re: Listview zeilen faerben(nicht OnCustomDrawItem)
 
Danke marabu,
Jetzt weiss ich wenigstens was ich zu tun habe.
Wuensche dir nen schoenes Wochenende.

Gruss Lucius..


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