edit control space vebieten



  • Servus Leute,

    bin hier gerade etwas am Programmieren und dabei auf ein Problem gestossen :
    Ich habe eine Editbox, in der der User Daten ( Name ) eingeben soll. In dieser Möchte ich keine Leerzeichen erlauben.
    Ich könnte natürlich bei jeder EN_UPDATE message den Inhalt parsen und die Leerzeichen wieder rauslöschen, aber das hört sich umständlich an, mit Aufräumen, etc.
    Bisher hatte ich einfach nur nach jedem EN_UPDATE das letzte Zeichen überprüft und es gelöscht falls es ein Leerzeichen war. Allerdings ist das nicht effektiv, da der User einfach mitten in das Wort klicken kann und dann trotzdem problemlos ein Leerzecvhen schreibt.

    Ich finde keine Messages, die mir die aktuelle Cursor position in dem Edit control verraten, also gibt es eig. gar keine andere Möglichkeit als die parse, lösch und wieder zusammen-Frikelei?

    Mfg



  • whatev schrieb:

    Ich finde keine Messages, die mir die aktuelle Cursor position in dem Edit control verraten

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb761598(v=vs.85).aspx



  • Belli schrieb:

    whatev schrieb:

    Ich finde keine Messages, die mir die aktuelle Cursor position in dem Edit control verraten

    http://msdn.microsoft.com/en-us/library/windows/desktop/bb761598(v=vs.85).aspx

    Hmm, hatte vor dem post mit der Message bzw entsprechendem Makro etwas rumprobiert und nur Schmarrn rausbekommen, also dachte ich es tut nicht das, was ich wollte.

    Ich werd jetzt nochmal eben ganz genau testen, wird wohl mein Fehler gewesen sein.

    Danke dir.



  • DWORD sel = Edit_GetSel ( reinterpret_cast<HWND>(lParam) );
        WORD index = LOWORD ( sel );
        char buf[1024];
        if (  reinterpret_cast<HWND>(lParam ) == logFrame.getHandle ( LoginFrame::NICKNAME ) ) {
    		int length = Edit_GetText ( reinterpret_cast<HWND>(lParam ) , buf, 1023 );
    		if ( buf[index-1] == ' ' ) {
    
    			for ( int i = index-1; i < length; i ++ ) {
    							buf[i] = buf[i+1];
    			}
    				Edit_SetText ( reinterpret_cast<HWND>(lParam), buf );
    				Edit_SetSel ( reinterpret_cast<HWND>(lParam), index-1, index-1 );
    		}
        }
    

    Okay, so funktionierts einwandfrei. Danke nochmal 😉


  • Mod

    Und warum so kompliziert. Einfach das edit-Control subclassen und WM_CHAR abfangen und bei Space ignorieren.


Anmelden zum Antworten