AGB  ·  Datenschutz  ·  Impressum  







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

Listview ganze Spalte färben

Ein Thema von Amenovis · begonnen am 19. Nov 2018 · letzter Beitrag vom 21. Nov 2018
Antwort Antwort
Amenovis

Registriert seit: 17. Nov 2011
52 Beiträge
 
#1

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 21:51
Ehm ich möchte dich nicht veräppeln oder dir deine Zeit stehlen ich lese was du schreibst und bin darüber sehr Dankbar... Ich habe auch deine Zeilen verstanden. Nur wenn ich es nachmache bei mir im Programm macht er es nicht.

Es stellt sich mir die Frage warum mit eigener Prozedur das versteh ich wirklich nicht... Tut mir leid das ich zu blöde bin

Edit: SetLVColumnColour( Sender, 0 ); färbt spalte 1 aus der case anweisung der prozedur also weiss

der zweite block färbt die subitems

warum du es gerade so tust keine ahnung

und noch ne frage wie färbst du den die erste spalte ohne case und ohne prozedur oder nutzt du das immer auch dann wenn du nur die erste spalte färben willst

Geändert von Amenovis (21. Nov 2018 um 21:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 22:19
Dann geh ich mal etwas auf Deine Fragen ein:

OK bei deiner Version brauch ich 3 Blöcke..

Eine eigene Prozedur
Dann ein Block für die Erste Spalte (Caption)
Dann ein Block für die 2te bis xte Spalte (Subitems).

Geht das nicht theoretisch auch ohne eigene Prozedur
Wie Du ans Ziel gelangst liegt ausschließlich an Dir, Du kannst gerne die benötigten Teile in entsprechende Events kopieren.

Ehm ich möchte dich nicht veräppeln oder dir deine Zeit stehlen ich lese was du schreibst und bin darüber sehr Dankbar... Ich habe auch deine Zeilen verstanden. Nur wenn ich es nachmache bei mir im Programm macht er es nicht.
Zeige mir Dein Source dann sieht man wo Du was falsch machst, wenn Du mein Source von oben 1:1 kopierst und benutzt funktioniert alles nach besten Wissen und Gewissen.

Es stellt sich mir die Frage warum mit eigener Prozedur das versteh ich wirklich nicht... Tut mir leid das ich zu blöde bin
Das dient mir nur dazu um nicht das benötigte doppelt in den Events schreiben zu müssen und sollte in erster Linie Dir helfen, da die Farben nach Spalten angeordnet sind und so Fehler vermieden werden.

...
warum du es gerade so tust keine ahnung
...
und noch ne frage wie färbst du den die erste spalte ohne case und ohne prozedur oder nutzt du das immer auch dann wenn du nur die erste spalte färben willst
Die VCL sieht vor das man bestimmt Dinge in bestimmten Events ausführt.
Da gibt es, wie Du bereits selbst gemerkt hast mehrere Events.
OnCustomDrawItem dient dabei dem Hauptelement (Spalte 1) Aufmerksamkeit zukommen zu lassen.
OnCustomDrawSubItem wird sich dann vermutlich um alles nach Spalte 1 kümmern.
OnCustomDraw benutze ich wenn ich zum Beispiel ein Hintergrundbild haben möchte.

Worauf ich hinaus will ist, benutze für das was Du erreichen möchtest das entsprechende Event.
Ein Erzwingen ist sicherlich möglich aber ob es Sinnvoll wäre mag ich bezweifeln.

Grüße
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Amenovis

Registriert seit: 17. Nov 2011
52 Beiträge
 
#3

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 22:45
ok dann bin ich ja doch gar nicht so weit weg von deinem

Du machst es mit der prozedur und dem array
die eigene Prozedur wollte er schon nicht ich dachte ich hätte sie nicht initalisiert
Beispiel.. Geh ich auf listview events und mach einen doppelklick fügt er oben die Prozedur automatisch ein und unten zwischen begin und end sag ich ihm was ich will (EDIT: Ahh Vegiss das ich bin doch zu doof ich hab zwar die Prozedur zwischen public eingefügt aber die Zeile drüber hatte ich voll vergessen... das viel mir jetzt auf wo ich das beispiel schrieb urgssss)

Delphi-Quellcode:
{Event1 das meinte ich mit Block1}
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.SubItems[0] then Color:=clred;{<<..Die Zeile so Korrekt?}
end;

{Event2 das meinte ich mit Block2}
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
if Item.SubItems[1] then Color:=clgreen else
if Item.SubItems[2] then Color:=clyellow else
if Item.SubItems[3] then Color:=clgray else
end;

Geändert von Amenovis (21. Nov 2018 um 22:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 23:05
Okay, einfach nur meinen Event Code kopieren ohne Events zuzuweisen das klappt dann wohl nicht.

Nimm einfach mein Beispiel aus dem Anhang als Vorlage.

Ps: Das einzige was Du zu machen hast ist in der Zeile wo ich Spalte 1 Spalte 2 usw geschrieben habe
-> passe dort deine Wunschfarbe an und wenn Du mehr möchtest musst Du das Array [0..2] erweitern.
Angehängte Dateien
Dateityp: 7z LVColor.7z (136,3 KB, 4x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (21. Nov 2018 um 23:10 Uhr)
  Mit Zitat antworten Zitat
Amenovis

Registriert seit: 17. Nov 2011
52 Beiträge
 
#5

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 23:10
Ok das mach ich später zu hause bin noch auf der Arbeit
hab hier nichts zum öffnen das ist auf dem anderen pc

aber bitte eine letzte Frage was muss den bei der ersten Spalte anstatt item.subitems[] drin stehen ?


Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item.SubItems[0] then Color:=clred;{<<..so ist das sicher Falsch weil die erste spalte ja caption nicht supitem ist} 
end;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 23:18
aber bitte eine letzte Frage was muss den bei der ersten Spalte anstatt item.subitems[] drin stehen
Das hier:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if Item <> Nil then
    Sender.Canvas.Brush.Color := clRed;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Amenovis

Registriert seit: 17. Nov 2011
52 Beiträge
 
#7

AW: Listview ganze Spalte färben

  Alt 21. Nov 2018, 23:29
OK dann nochmal vielen vielen Dank für deine Zeit UND deine Geduld!

Mhh ich finde beide Wege schön, je nachdem was man braucht

Nur Spalte 1 mein Weg nur subitems deinen oder meinen Weg bei Spalte 1 und 2+x ... 100% deinen Weg ist übersichtlicher

lg

Timo

Edit: Deinen werd ich sicher auch verwenden die Zeit war nicht umsonst
  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 02:06 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 by Thomas Breitkreuz