Hintergrundfarbe eines textfeldes ändern



  • Hallo

    erstmal vorweg: Ich hab die forensuche benutzt, beiträge gefunden, aber die helfen mir nicht wirklich weiter.

    Problem: Ich hab ein Textfeld, welches ich weiss färben möchte. ich habe aber leider keine ahnung was ich wo in welche datei schreiben muss.
    ich hab schon viel ausprobiert, aber ich komm ned drauf!
    Bin immer nochn anfänger... ,-)

    mfg



  • Was heißt für dich Textfeld?
    CEditCtrl?
    CStatic?



  • Hast du den Link schon gefunden?
    http://www.codeproject.com/miscctrl/hmxcontrols.asp

    Stand ein paar Beiträge weiter unten.
    Schau es dir erstmal an. Dann hast du bestimmt etwas konkretere Fragen oder auch gar keine mehr. 🙂



  • Hallo...

    sry... ich mein ein CStatic feld.
    kann man das nicht mit den standard funktionen realisieren??

    mfg



  • Hast du in das Projekt mal reingeschaut?
    Das SIND Standardfunktionen. 🙄

    Du kannst bei keinem Control einfach so mal eine Farbe ändern. Je nach Control ist das mehr oder weniger Aufwand. Um eine eingene Klasse kommt du nur herum, wenn du das nur in einer Ansicht machen willst. Und für den Fall gibt es Lösungen im Forum, die müßtest du schon gefunden haben.

    In dem Beispiel wird dir gezeigt, wie das geht. Wenn du im Forum schon mal gesucht hast, wirst du wissen, dass du besonders auf die OnCtlColor Funktion achten musst. (*mitzaunpfahlwink*)



  • die OnCtlColor funktion hab ich mir angeschaut, und jetz grade geschafft zu implementieren. ich kann mein code sogar kompilieren wenn ich hier

    HBRUSH CMaxMidiProtoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
    
    if(pWnd->GetDlgCtrlID() == IDC_BOOK1) 
    { 
    
    pDC->SetTextColor(RGB(95,100,144)); 
    //pDC->SetBkColor(RGB(255,0,0)); 
    
    return m_Brush; 
    }
    

    statt return m_brush;
    return 0;
    schreibe.
    ich hab nämlich keinen blassen schimmer wie ich eine membervariable vom typ cbrush anlege....peinlich... ,-)



  • Okay, stellen wir uns mal doof:
    Wie legst du eine Membervariable vom Typ UINT oder BOOL oder so an? 😕
    Genauso machst du das mit einem CBrush. 😃

    Stellen wir uns etwas weniger dumm, denn ich denke, du hast weniger mit dem Anlegen als mit dem Füllen das Problem: 😉
    Füllen (würd ich im Konstruktor machen):

    m_brsBkGnd.CreateSolidBrush(RGB(255,255,255)); // Weiß
    

    Löschen, das mußt du zwischen jedem Füllen und im Destruktor machen

    m_brsBkGnd.DeleteObject();
    

    Okay? 🙂



  • estartu_de schrieb:

    Okay, stellen wir uns mal doof

    das ist nicht schwierig... ,-)

    ich hab jetz im OnInitDialog mit CBrush m_brush erstellt.
    aber: jetzt kommt ne fehlermeldung in HBRUSH CDialog::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)

    dass er das m_brush ned kennt...



  • Hmm, da scheinen dir Grundlagen zu fehlen.

    Eine Membervariable einer Klasse packt man in den Header, also in die .h Datei.
    Mach sie bitte protected, du brauchst sie ja außerhalb der Klasse nicht.
    So eine Variable gilt innerhalb der ganzen Klasse und sie bleibt gültig, solange die Klasse gültig ist.

    In OnInitDialog kannst du sie füllen (statt Konstruktor), aber wenn du sie dort deklarierst, ist sie nur dort lokal gültig ung "stirbt" sobald diese Funktion verlassen wird. (Schau mal in ein Buch zu "Gültigkeitsbereiche/Lebenszeiten von Variablen".)

    Jetzt klarer? 🙂



  • peinlich...
    nein normalerweise weiss ich das...
    kann ich dass noch auf silvester schieben??? 😉



  • Du meinst, du hast noch zu viel Restalkohol im Blut?
    Okay, akzeptiert - aber hol dir schnell einen Kaffee. 😃

    Jetzt klappts also? 🙂



  • ich komm jetz zurecht...danke...
    das mit dem kaffee ist ne gute idee...



  • hallo

    jetz gibts schon wieder probleme...
    ich hab in OnInitDialog

    m_brush.CreateSolidBrush(RGB(0,0,0));

    stehen.

    unter der OnInitDialog hab ich folgende funktion:

    HBRUSH Property::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor)
    {
    
        HBRUSH hbr = Property::OnCtlColor(pDC, pWnd, nCtlColor);
    
       if (pWnd->GetDlgCtrlID() == IDC_DISPLAYTEXT) 
       { 
            pDC->SetTextColor(RGB(0,0,0)); 
            pDC->SetBkColor(RGB(255,255,255)); 
    
            return m_brush; 
       }
    
       return hbr;
    
    }
    

    aber nun bekomm ich an dieser stelle

    m_brush.CreateSolidBrush(RGB(0,0,0));

    einen Fehler. Das CStatic Feld hat auch die farbe nicht gewechselt...
    hab keine Ahnung warum



  • Was für einen Fehler?



  • Debug Assertion Failed

    kommt aber nur vor wenn ich ein zweites mal den dialog öffne...
    wenn ich auf ignorieren klicke läufts normal weiter, aber dass kanns ja auch ned sein...



  • Drück bitte wiederholen, das ist kein Fehler sondern ein "du hast da Mist gemacht, guck mal" von der MFC. 🙂

    Dann zeig den Code, wo er steht.



  • er bleibt bei dieser zeile stehen

    ASSERT(m_hObject == NULL);
    

    kannst du was damit anfangen?



  • Da ist schon was da, was nicht da sein darf.

    Um zu sagen, WAS schon da ist, müßte ich den Aufrufstack kennen (welche Zeile ist die aus deinem Code?) und die Funktion um den ASSERT herum.

    Ich vermute, du machst ein zweites Mal CreateSolidBrush ohne ein DeleteObject dazwischen.



  • hey du kennst dich ja gut aus ;-)...
    kaum schreibt man ein deleteobject dazwischen, schon läufts wieder...
    aber es wird immer noch ned weiss....



  • Das mit dem DeleteObject hatte ich dir aber geschrieben, lies mal weiter oben. 😉

    Kommt er überhaupt in die Funktion? Setz mal einen Breakpoint rein oder ein TRACE (also in die if, außerhalb kommt er mit Sicherheit lang...).



  • nein er kommt nicht in die funktion rein...


Anmelden zum Antworten