TListView Item Fontfarbe nachträglich anhand von Ivents färben



  • Hallo,
    es ist ja üblich anhand von ListViewCustomDrawItem Items bei der Erstellung vorweg einzufärben. Diese Methodik ist mir bekannt. Allerdings habe ich gerade ein Verständnisproblem:

    z.B. 12 Items befinden sich in der ListView. Jetzt tritt irgendwo im Programm ein Event auf worafhin 2 von den 12 Items nachträglich die Textfarbe (clRed) ändern müssen.

    Das Event liefert mir einen SubString. In einer for Schleife klapper ich alle ListItems ab bis der SubString des Events (Spielername) mit einem SubString des Items (Spielername) übereinstimmt. Jetzt habe ich das Item welches die Textfarbe ändern soll. Wie kann ich jetzt weiter vorgehen, bzw kann man das Ereignis ListViewCustomDrawItem nachträglich irgendwie auslösen?



  • Hallo,

    Schon Mal

    folgendes Probiert?

    ListView1->Repaint();
    //---oder 
    ListView1->Refresh();
    

    Gruß
    Hawk



  • Ich merke gerade das dies doch nicht der richtige Weg ist mein Vorhaben zu lösen. Ich probiere noch was anderes aus



  • Ich habe es wie folgt gelöst:

    In der ListView hat jedes Subitem zusätzlich einen String erhalten, worin der Status des Listeneintrages anhand von Events eingetragen wird:

    for (int i = 0; i < ListView1->Items->Count;i++)
             {
                 if(ListView1->Items->Item[i]->SubItems->Strings[0] == customer)
                 {
                  ListView1->Items->Item[i]->SubItems->Strings[1]  = "payed";
                  ListView1->Items->Item[i]->Update();
                  found = true;
                 }
    
             }
    
    //---ListView1CustomDrawItem
    
    if(Item->SubItems->Strings[1] == "payed")
    Sender->Canvas->Font->Color = clBlue;
    else
    if(Item->SubItems->Strings[1] == "open")
    Sender->Canvas->Font->Color = clGray;
    

    Allerdings funktioniert es nur reibungslos wenn ich ein Update für das ListItem
    veranlasse. Aktualisiere ich nicht manuel per Update() wird nur ein Teil des Itemfonts inkl. Subitems eingefärbt. Nach Anklicken des Items oder minimize -> maximize der Anwendung wird das Item erst vollständig eingefärbt. Im Netz findet man einige Hinweise auf ein solches Verhalten und der einzige Workaround der bei mir erfolgreich war ist die Update Funktion des Items.

    ListView1->Items->Item[i]->Update();
    

Anmelden zum Antworten