Textfarbe bei ctrl List



  • Hallo

    ich habe ein kleines Problem mit der Textfarbe mit abhängigkeit
    des Listeneintrages

    Bild unter

    [url] http://www.vossy123.de/Schriftfarbe.htm [/url]

    Bei Codeguru gibt es da auch nichts.
    Den ganzen Text in einer anderen Farbe ändern ist nicht das problem.

    Hier mal der Code wo die Listeneinträge erstellt werden

    for (int abc = 0;abc < Datenanzahl ;abc++)
    
            {
    
                Aufgabe_gestellt = Text[abc][0] + " + " + Text[abc][1] + " = " + Text[abc][2];
                Druck[abc][0] = Aufgabe_gestellt;
                Vorschlag = Text[abc][3] + " + " + Text[abc][4] + " = " + Text[abc][5];
                Druck[abc][1] = Vorschlag;
                AusgabeZ1.Format("%d",Aufgabe[abc][0]);
                AusgabeZ2.Format("%d",Aufgabe[abc][1]);
                AusgabeE.Format("%d",Aufgabe[abc][2]);
                AufgabeZusammen = AusgabeZ1 + " + " + AusgabeZ2 +" = " + AusgabeE;
                Druck[abc][2] = AufgabeZusammen;
                Druck[abc][3] = Text[abc][6];
                NummerID.Format("%d",abc+1);
    
                if ( Text[abc][6] == "ja")
    
                {
                    Anzahl_Fehler++;
                }
    
                m_Sicht1.InsertItem(abc,(LPCTSTR)"",abc);
                m_Sicht1.SetItemText(abc,0,(LPCTSTR)NummerID);
                m_Sicht1.SetItemText(abc,1,(LPCTSTR)Aufgabe_gestellt);
                m_Sicht1.SetItemText(abc,3,(LPCTSTR)Vorschlag);
    
                if ( m_listen_Add == 1)
                {
                    m_Sicht1.SetItemText(abc,5,(LPCTSTR)AufgabeZusammen);
                }
    
                m_Sicht1.SetItemText(abc,7,(LPCTSTR)Text[abc][6]);
                m_Sicht1.SetItemText(abc,8,(LPCTSTR)Text[abc][7]);
            }
    

    gebt mir mal einen Tip

    Ich habe es versucht in die Zelle ein Bitmap zu laden aber
    das gefällt mir nicht. Ich will es mit der Schrift haben die sich nur
    bei << nein >> auf rot ändert.

    Danke Vossy



  • 2 Links

    http://www.codeguru.com/listview/CustomDraw.shtml als customdraw

    Beides müsste Dein Problem lösen



  • da muß ich dich leider enttäuschen.
    Beide möglichkeiten eignen sich nicht.
    Mit der einen habe ich auch schon experimentiert aber ich
    kam leider nur soweit das ich objecte implementieren kann

    Vossy



  • habe mir eine möglichkeit erstellt mit ein paar wenigen
    änderungen kann man sich das auch für den Hintergrund
    erstellen

    hier mein Code

    void CSicht_Text::SetTextFarbe(int nItem,int nSubItem,COLORREF txtColor,bool redraw)
    {   
    
    LVITEM pItem;
    InitLVITEM(nItem,0,&pItem);
    
    LS_item * lpLS_item = NULL;
    lpLS_item = (LS_item*) pItem.lParam;
    
    if(nSubItem > 0)
    {
    lpLS_item = lpLS_item->subitems[nSubItem - 1];
    }
    
    lpLS_item->txtColor = txtColor;
    
    if(redraw)
    {
    CListTextFarbe::Update(nItem);
    }
    
    }
    

    Code sagt eigendlich alles
    Wer dennoch eine genaue Beschreibung wünscht der melde sich

    Vossy



  • schreib ne erklärung dazu, dann pack ichs in die FAQ.



  • @Vossy
    Also entweder drückst Du Dich völlig falsch aus mit dem, was Dein Problem ist, oder der Code bei codeguru gefällt Dir net

    void CListCtrlEx::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
    {
     //for this notification, the structure is actually a
     // NMLVCUSTOMDRAW that tells you what's going on with the custom
     // draw action. So, we'll need to cast the generic pNMHDR pointer.
     LPNMLVCUSTOMDRAW  lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
    
     switch(lplvcd->nmcd.dwDrawStage)
     {
      case CDDS_PREPAINT:
       *pResult = CDRF_NOTIFYSUBITEMDRAW;          // ask for subitem notifications.
      break;
    
      case CDDS_ITEMPREPAINT:
       *pResult = CDRF_NOTIFYSUBITEMDRAW;          // ask for subitem notifications.
      break;
    
      case CDDS_ITEMPREPAINT|CDDS_SUBITEM: // recd when CDRF_NOTIFYSUBITEMDRAW is returned in
      {                                    // response to CDDS_ITEMPREPAINT.
       *pResult = CDRF_DODEFAULT;
    
       int iCol = lplvcd->iSubItem;
       int iRow = lplvcd->nmcd.dwItemSpec;
    
       if((iRow & 1) && (iCol & 1))
       {
        lplvcd->clrTextBk = RGB(255, 0, 0);
        lplvcd->clrText = RGB(255, 255, 0);
        *pResult = CDRF_NEWFONT;
       }
      break;
      }
    
      default:// it wasn't a notification that was interesting to us.
       *pResult = CDRF_DODEFAULT;
      }
     }
    

    Dieser Code setzt doch haargenau die Farbe des Textes für jede ungerade Zeile und Spalte auf gelb.



  • hmmmm

    auch ne möglichkeit aber ich müßte

    if((iRow & 1) && (iCol & 1))

    neu inplementieren müssen und da finde ich meine
    Möglichkeit besser.

    Dennoch eine gute Idee aber letztendlich für mich ungeeignet.

    Und wie sagt ihr ihr immer kopieren kann jeder verstehen
    sollte man es auch.

    Du dEUs für eine komplette Klassenbeschreibung mit allen möglichkeiten
    da wird es für die FAQ zu umpfangreich.
    Gabt Ihr die möglichkeit Dateien einzubinden mit einen Link.
    Wenn dann schicke ich dir die komplette Klassen cpp und die Header

    Vossy



  • Vossy:
    Ne du. Ich meinte eigentlich, du sollst deine Funktion erklären 🙂 Nicht mit allen Möglichkeiten und so ...


Anmelden zum Antworten