AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Listview zeilen faerben(nicht OnCustomDrawItem)
Thema durchsuchen
Ansicht
Themen-Optionen

Listview zeilen faerben(nicht OnCustomDrawItem)

Ein Thema von lucius · begonnen am 25. Nov 2005 · letzter Beitrag vom 25. Nov 2005
Antwort Antwort
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 13:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 13:15
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 13:19
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.
  Mit Zitat antworten Zitat
marabu

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

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 17:54
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
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 18:01
Herzlichen Dank marabu,

Ich werde es sofort probieren.

ps: Hast du meine pm bekommen?

Gruss Lucius.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 18:09
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..
  Mit Zitat antworten Zitat
marabu

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

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 18:56
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
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Listview zeilen faerben(nicht OnCustomDrawItem)

  Alt 25. Nov 2005, 19:02
Danke marabu,
Jetzt weiss ich wenigstens was ich zu tun habe.
Wuensche dir nen schoenes Wochenende.

Gruss Lucius..
  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 11:16 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