Text, der dazugekommen ist, in einem RichEditControl auswählen.



  • Hallo,
    ich probiere schon seit Stunden hier rum und komme nicht darauf: Ich schreibe etwas im RichEditControl Fenster und wenn ich auf <Enter> drücke, soll der hinzugekommene Text ausgewählt werden.
    Also immer der Text zwischen zwei <Enter> Tastenanschlägen.
    Mein Versuch, um mir die Selektierung anzusehen, sieht so aus:

    LRESULT CALLBACK EditProc(HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (umsg)
    	{	
    		case WM_KEYUP:
    			if ( (int)wParam == 13 ) // Enter wurde gedrückt
    			{
    
    				SendMessage(hEdit, EM_SETSEL, (WPARAM)pos, (LPARAM)-1); // markieren
    				Sleep(1000);
    				pos = GetWindowTextLength(hEdit);
    				SendMessage(hEdit, EM_SETSEL, (WPARAM)pos, (LPARAM)pos); // Markierung rückgängig machen.
    			}
    
    	}
    
    	return CallWindowProc ((WNDPROC )WndProcMain,hWnd,umsg,wParam,lParam);
    }
    

    Dabei ist pos außerhalb der Callbackschleife definiert. Das RichEditControl ist gesubclasst, oder wie man sagt.
    Mein Problem ist nun, das zwar Text ausgewählt wird, aber: nur in der ersten Zeile so wie es sein soll. Ab der zweiten Zeile wird ein Buchstabe weniger ausgewählt, ab der dritten Zeile werden zwei Buchstaben weniger ausgewählt, usw...
    Es ist zum Haare raufen.
    😃
    Was mache ich falsch?



  • siehe titel 😉


  • Mod

    Und wie bitte hast Du Deine pos ausgerechnet?
    Sieht ganz so aus, als ob Du die Zeilenschaltungem mit CR/LF als nur ein Zeichen berücksichtigst.

    BTW:
    1. Warum reagierst Du auf Keyup. Bei Tastatureingaben reagiert man auf Keydown... Evtl. ist mit dem Keydown un VK_ENTER jetzt auch schon eine neue Zeile eingefügt worden. Wie verhinderst Du das?
    2. Ist das finaler Code mit dem Sleep. Ich halte esnicht für schön das Dein Programm eine Sekunde lang einfriert...



  • Hi,
    ich speichere jetzt die Positionen der \r - Zeichen, die nach jedem Betätigen einer Enter-Taste vom RichEditControl eingefügt werden.
    Das Sleep dient nur dazu, mir die Auswahl anzuzeigen, ist bloß zu Testzwecken.


Anmelden zum Antworten