Editbox D I R E K T farbig gestalten ?!



  • Ich weiss eig. nicht wo euer Problem liegt? Ein einfaches Bsp. würde mir genügen, doch meistens wenn ich hier eine Frage stelle, bekomme ich einen Link auf die MSDN - wo ich schon davor drauf war.
    Glaubt ihr wirklich ich würde hier eine Frage stellen ohne davor die MSDN zu "befragen" ??
    Ok, mein erster Beitrag war ein wenig plump formuliert, doch es war wirklich nicht "böse" gemeint, wie der Großteil es von euch wahrscheinlich aufgefasst hat. Ich wollte euch nicht beleidigen oder empören, das war wirklich nicht meine Absicht und wenn ich das getan habe, dann tut es mir leid!

    Zu meinen Prob.:

    case WM_CTLCOLORSTATIC:    
          {
          SetBkMode((HDC)wParam,RGB (0,0,0) );
           SetTextColor((HDC)wParam,RGB(255,0,0));
           return (long)CreateSolidBrush(RGB(0,0,0));            
          }
    
        case WM_CTLCOLOREDIT:
          {
           SetBkMode((HDC)wParam, RGB (0,0,0) );
           SetTextColor((HDC)wParam,RGB(255,0,0)); 
           return (long)CreateSolidBrush(RGB(0,0,0));  
          }
    

    Das Farbig-Gestalten funktioniert ja, doch wenn ich in einer Multiline-Editbox versuche Buchstaben mittels Backspace zu löschen, dann springt zwar der Cursor zurück, aber der Buchstabe steht trotzdem noch in der Editbox und wird dann überschrieben!? Wenn ich jetzt WM_CTLCOLOREDIT weglasse, dann funktioniert die Multiline-Editbox wieder ......

    hMessageTW = CreateWindowEx(WS_EX_CLIENTEDGE,
                                     "edit",
                                      Message,
                                      WS_CHILD | WS_VSCROLL | ES_MULTILINE |                  
                                      ES_AUTOVSCROLL | WS_VISIBLE,
                                      60, 190, 360, 100,
                                      hWnd,
                                      NULL,
                                      ((LPCREATESTRUCT) lParam) -> hInstance,
                                      NULL);
    

    Kennt jemand das Problem, bzw. weiss jemand wie man es löst ?
    MFG:

    n()()bi



  • n()()bi schrieb:

    case WM_CTLCOLORSTATIC:    
          {
          SetBkMode((HDC)wParam,RGB (0,0,0) );
           SetTextColor((HDC)wParam,RGB(255,0,0));
           return (long)CreateSolidBrush(RGB(0,0,0));            
          }
    
        case WM_CTLCOLOREDIT:
          {
           SetBkMode((HDC)wParam, RGB (0,0,0) );
           SetTextColor((HDC)wParam,RGB(255,0,0)); 
           return (long)CreateSolidBrush(RGB(0,0,0));  
          }
    

    Du solltest einmal mittels CreateSolidBrush einen (in der WndProc static) Brush erzeugen und den dann jeweils returnen. So wie Du das da machst geht Deinem Programm bald "die Puste aus" was GDI-Resourcen angeht.

    Dann nur nicht vegessen den Brush beim beenden wieder mittels DeleteObject zu zerbröseln!



  • ...und die doppelte Tipparbeit kannste Dir auch sparen wenn Du's gleich so machst:

    static HBRUSH MyBrush;
    
    case WM_CREATE:
        MyBrush = CreateSolidBrush(RGB(0,0,0));
        return 0;
    
    case WM_CTLCOLORSTATIC:     
    case WM_CTLCOLOREDIT: 
        { 
            SetBkMode((HDC)wParam, RGB (0,0,0) ); 
            SetTextColor((HDC)wParam,RGB(255,0,0)); 
            return (long) MyBrush;
        }
        break;
    
    case WM_DESTROY:
        DeleteObject(MyBrush);
        return 0;
    


  • n()()bi schrieb:

    Zu meinen Prob.:

    case WM_CTLCOLORSTATIC:    
          {
          SetBkMode((HDC)wParam,RGB (0,0,0) );
           SetTextColor((HDC)wParam,RGB(255,0,0));
           return (long)CreateSolidBrush(RGB(0,0,0));            
          }
    
        case WM_CTLCOLOREDIT:
          {
           SetBkMode((HDC)wParam, RGB (0,0,0) );
           SetTextColor((HDC)wParam,RGB(255,0,0)); 
           return (long)CreateSolidBrush(RGB(0,0,0));  
          }
    

    Das Farbig-Gestalten funktioniert ja, doch wenn ich in einer Multiline-Editbox versuche Buchstaben mittels Backspace zu löschen, dann springt zwar der Cursor zurück, aber der Buchstabe steht trotzdem noch in der Editbox und wird dann überschrieben!? Wenn ich jetzt WM_CTLCOLOREDIT weglasse, dann funktioniert die Multiline-Editbox wieder ......

    hMessageTW = CreateWindowEx(WS_EX_CLIENTEDGE,
                                     "edit",
                                      Message,
                                      WS_CHILD | WS_VSCROLL | ES_MULTILINE |                  
                                      ES_AUTOVSCROLL | WS_VISIBLE,
                                      60, 190, 360, 100,
                                      hWnd,
                                      NULL,
                                      ((LPCREATESTRUCT) lParam) -> hInstance,
                                      NULL);
    

    Kennt jemand das Problem, bzw. weiss jemand wie man es löst ?
    MFG:

    n()()bi

    Und warum erklärst du nicht gleich, was du wirklich willst bzw. wo du Probleme mit dem Code hast? 🙄



  • Hmmm ... danke fürs "Zeitnehmen", aber das Prob besteht immer noch ?! Farbig gestalten funktioniert, aber wenn ich ein Zeichen in der Editbox lösche, dann springt nur der Cursor zurück, aber das Zeichen das eig. gelöscht werden soll bleibt stehen ... Was ist da los ???

    ThX nochmal, MFG:
    n()()bi



  • Wird sie eventuell nicht neu gezeichnet?

    bei mir ist SetBKMode übrigens so deklariert:

    int SetBkMode(
      HDC hdc,      // handle to DC
      int iBkMode   // background mode
    );
    

    Warum gibst du beim zweiten Parameter einen RGB Wert an? 🙄



  • Ich habe die BK-Mode auf Schwarz gesetzt, weil mein Hintergrund schwarz erzeugt werden soll ... Mit TRANSPARENT funktioniert es nicht - nur bei Single-Line Editboxen! Das Prob liegt nur an der Multiline-Box, da funktioniert nur das Farbig-Gestalten, doch die Korrektur von Eingaben nicht ! Mich wundert es, dass es bei Single-Lines geht, aber bei Multilines nicht?!

    MFG:
    n()()bi



  • n()()bi schrieb:

    Ich habe die BK-Mode auf Schwarz gesetzt, weil mein Hintergrund schwarz erzeugt werden soll ... Mit TRANSPARENT funktioniert es nicht

    Ich denke dann bräuchtest du eher OPAQUE - die Farbe wird dann über SetBkColor gesetzt 😉



  • Jop, ThX! Funktioniert einwandfrei !

    MFG:
    n()()bi



  • Nur so nebenbei, es heisst Caret...


Anmelden zum Antworten