TListView Einträge farbig machen
-
Vielen Dank für die Ideen.
Das habe ich auch zuerst versucht, aber Borland bemeckert dann direkt:
Die Methode ListView1DrawItem, auf die ListView1->OnDrawItem verweist, enthält eine inkompatible Parameterlist. Soll der Verweis entfernt werden?Fällt Jemand denn ein anderer Trick ein?
Vielleicht kann man den Namespace Windows:: unschädlich machen?Mir fällt akut leider nur ein eigener Event-Handler ein, wobei man dann mit Qt-Nachrichten operieren muss, welche eigentlich keinen Parameter haben und die Borland-Doku dazu schlicht falsch ist ... das würde total abartig und den Rahmen für farbige Listenelemente sprengen.
-
Hallo
und was passiert wenn du statt dem Qstdctrls:: dann eben Windows:: überall davor schreibst?
bis bald
akari
-
Scheint in der Tat ein Bug zu sein.
Benutz doch einfach OnCustomDrawItem, dat geiht.
-
Danke für die tatkräftige Unterstützung.
-- Windows:: mag er auch nicht.
-- Auf OnCustomDrawItem reagiert er - schön.
In einer Doku habe ich gefunden, dass ich nur den "Stift" einfärben muss und schon sollten die Elemente in dieser Farbe gezeichnet werden:
Canvas->Pen->Color= clRed;Wird es aber nicht.
-
Hallo
wenn du das so verwendest, wird auch das Canvas des Forms verwendet.
Das nutzt dir aber nichts, denn du willst den Canvas des ListViews ändern.Sender->Canvas->Pen->Color= clRed;bis bald
akari
-
Danke, aber mein Sender hat die Eigentschaft Canvas nicht:
void __fastcall TForm1::ListView1CustomDrawItem(TCustomViewControl *Sender, TCustomViewItem *Item, TCanvas *Canvas, const TRect &Rect, TCustomDrawState State, TCustomDrawStage Stage, bool &DefaultDraw) { }Langsam bereue ich es wirklich, dass ich CLX statt VCL verwendet habe.
-
Hallo
in der VCL hat TCustomListView die Eigenschaft Canvas...
aber auch kein Problem, du must statt Sender eben direkt das ListView nehmen, wie es als Control heißt.ListView1->Canvas->Pen->Color= clRed;/Edit : Braunstein : Ja... warum einfach wenns auch umständlich geht?

bis bald
akari
-
Das Canvas steht doch als Parameter in der Funktion ListView1CustomDrawItem. Nimm doch einfach das.
-
Hatte ich zuerst (s.o.) gemacht, das erzeugt keine Veränderung in der Farbe.
-
Welche Farbe willst du denn ändern? Pen ist ja eigentlich für Linien o.ä. zuständig. Für Schriften wäre ja eher Font->Color da und für den Hintergrund Brush->Color.
-
Ich möchte ursprünglich den Hintergrund rot machen, es wäre auch ok, wenn die Schrift rot machen könnte.
Canvas->Font->Color= clGreen; Canvas->Brush->Color= clYellow;Bringt aber auch keinen Effekt.
Ich habe zur Sicherheit mal OnDrawItem und OnDrawSubItem damit bestückt, auch kein Ergebnis.Bei der VCL funktioniert das so oder muss man dann nicht nur die Zeichenfarbe sondern auch dann selbst die Kästchen malen?
-
Bei einer ListBox müsste man das Kästchen selber malen. Wie das bei einer ListView und CustomOwnerDraw ist weiss ich nicht.
Du hast ja alle Infos um dein Kästchen selber zu malen (z.Bsp. mit FillRect), also machs doch einfach.
-
Danke, das funktioniert.
Leider ist das sehr unpraktisch, da ich dann die gesamten TListItems mit ihren ganzen Funktionen und Erscheinungsformen nachempfinden müsste.
-
Hallo,
Hast Du das schon probiert :
void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw) { Sender->Canvas->Font->Color = clBlack; Sender->Canvas->Brush->Color = clRed; }Bei VCL-Projekten funktioniert es.
OwnerDraw ist falseNash
-
Bei CLX hat Sender leider nicht die Eigentschaft Canvas nicht.
In was muss ich das casten?
-
Hallo
wie in diesem Thread auf Seite 2 bereits beschrieben ist, ist in der CLX die Canvas-Fläche ein Extra-Parameter der Events.
bis bald
akari
-
Wie auch bereits im Thread beschrieben, bringt die Manipulation des Canvas-Parameter keine Änderung.
Ich glaube, wie drehen uns im Kreis.
-
void __fastcall TForm1::ListView1CustomDrawItem(TCustomViewControl *Sender, TCustomViewItem *Item, TCanvas *Canvas, const TRect &Rect, TCustomDrawState State, TCustomDrawStage Stage, bool &DefaultDraw) { Canvas->Brush->Color = clLime; Canvas->FillRect(Rect); }Funktioniert problemlos.