Die Textbox überschneidet Text



  • Hallo liebes Forum,

    ich habe ein komisches Problem

    Ich habe eine Textbox

    HWND  TextBox;
                                    TextBox = CreateWindow
                                        ("EDIT", "",
                                        WS_VISIBLE | WS_CHILD | ES_MULTILINE | WS_HSCROLL | ES_AUTOVSCROLL | WS_HSCROLL,
                                        150, 121, 450, 700,
                                        hwnd, (HMENU) ID_TEXTBOX, NULL, NULL);
    

    Jetzt schreib ich in die Textbox.
    Das funktioniert auch alles. Aber wenn ich irgendwas verbessern will, dann überschneidet er den Text einfach.

    Also ddamit meine Ich folgendes

    hallo test test testjwadoadwhioasd
    usuiaosdiisaidiwiaoskdiawjd

    so und diese Beiden "Sätze" überschneidet er einfach. Ich kann auch mit der "entf" Taste nichts löschen. Der Cursor geht zwar zurück aber der Text wird nicht gelöscht, so das sowas herauskommt:

    http://www.fotos-hochladen.net/uploads/screenshot703dlpohza9f.png

    Ich hoffe ihr könnt mir weiterhelfen



  • Ben123 schrieb:

    Aber wenn ich irgendwas verbessern will, dann überschneidet er den Text einfach.

    Ich wusste schon immer, daß Bill Gates ein übler Knochen ist.

    Ben123 schrieb:

    Der Cursor geht zwar zurück aber der Text wird nicht gelöscht, so das sowas herauskommt:
    http://www.fotos-hochladen.net/uploads/screenshot703dlpohza9f.png

    Du hast dir schon mal angesehen was auf dem screenshot erkennbar ist? Ich sehe nur eine amorphe Masse von Rot.



  • Ja genau.

    Da hat er den Text überschnitten.

    Also ich schhreibe:

    Hallo test test test
    

    gehe dann mit dem Cursor hierhin:

    Hallo test t(hier)est test
    

    um (z.B.) etwas zu verbessern.

    aber dann überschneidet er das einfach (sowie im Screenshot).
    Der Grund warum das rot ist, ist weil ich die Schrift halt rot gemacht habe.



  • Tut mir Leid, aber da kann ich dir so auf die Schnelle nicht weiterhelfen weil ich von der WinAPI eher keine Ahnung habe.

    Da gibt's hier richtig gute Leute wie Herrn Richter und Herrn Kalmbach z.B.
    Ich bin dagegen ein kleines Licht.

    Ich müsste das mit MFC nachvollziehen, testen und debuggen.
    Werde morgen erst mal testen, ob du die editbox überhaupt korrekt aufgesetzt hast.



  • Ne kannst dir die Mühe sparen.

    Ich hatte folgenden Code

    case WM_CTLCOLORSTATIC:
                            {
    
                                SetTextColor((HDC)wParam,RGB(111,111,111));
                                SetBkColor((HDC)wParam,RGB(0,0,2));
                                SetBkMode((HDC)wParam, TRANSPARENT);
                                return (LRESULT)GetStockObject(WHITE_BRUSH); // return a DC brush.
    
                            }break;
    
                        case WM_CTLCOLOREDIT:
                            {
                                //return (LRESULT)GetStockObject(NULL_BRUSH);
    
                                SetTextColor((HDC)wParam,RGB(253,0,6));
                                SetBkColor((HDC)wParam,RGB(0,255,255));
                                SetBkMode((HDC)wParam, TRANSPARENT);
                                return (LRESULT)GetStockObject(WHITE_BRUSH);
    
                            }break;
    

    Wenn ich das so veränder

    case WM_CTLCOLORSTATIC:
                            {
    
                                SetTextColor((HDC)wParam,RGB(111,111,111));                            
                                return (LRESULT)GetStockObject(WHITE_BRUSH); // return a DC brush.
    
                            }break;
    
                        case WM_CTLCOLOREDIT:
                            {
    
                            SetTextColor((HDC)wParam,RGB(253,0,6));                            
                                return (LRESULT)GetStockObject(WHITE_BRUSH);
    
                            }break;
    

    Funktioniert es



  • Trotzdem danke



  • Aehm ne doch noch nicht.

    Ich mache die Textbox Transparent

    case WM_CTLCOLOREDIT:
                            {
    
                                SetTextColor((HDC)wParam,RGB(255, 255, 255));
                                return (LRESULT)GetStockObject(NULL_BRUSH);
                            }break;
    

    Jetzt sieht das folgendermaßen aus

    http://www.fotos-hochladen.net/view/screenshot197y6it2nmrh.png

    mit

    SetBkColor((HDC)wParam,RGB(int, int, int));
    

    kann ich die Farbe des Balkens verändern.

    Mit

    SetBkMode((HDC)wParam, TRANSPARENT);
    

    Kann ich zwar den Balken wegmachen, aber er überschneidet den Text wieder.

    Es muss einen anderen Weg geben. Ich glaube der Grund warum er den Text überschneidet ist ganz einfach. Es liegt an diesem "TRANSPARENT". Er macht den Buchstaben, aber denkt, der Buchstabe ist nicht da weil er halt "TRANSPAARENT" ist (Also unsichtbar)(So ist meine Theorie).

    PS: Auf dem Screenshot sollte stehen "Aber der weiße Balken vergrößert sich mit jeder neuen Zeile"


  • Mod

    Das geht so nicht. Die TextBox muss zuvor, dafür sorgen, dass der Hintergrund wieder hergetsellt wird.
    Verwendest Du TRANSPARENT beim zeichnen und einen NULL Brusch wird natürlich der Hintergrund nicht wieder hergestellt.

    Also zuerst den Hintergund neu mitzeichnen lassen (InvalidateRect auch auf das Parent und UpdateWindow) dann wird auch dsas Child Window mit gezeichnet. Aber das Flackert mit Sicherheit.

    Ansonsten dafür sorgen, das das Edit Control den selben Hintergrund zeichnet.


Anmelden zum Antworten