TListView Einträge farbig machen



  • 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 false

    Nash



  • 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.


Anmelden zum Antworten