SDL_KeyBoardEvent - Shift einbauen..



  • Joa, also ich hätte da gern mal nen Problem mit meiner heißgeliebten SDL..
    Die Keyboard-Events arbeiten so, dass der eingegebene Scancode bei Großbuchstaben aus dem scancode der jeweiligen Buchstabentaste und dem Modifikators KMOD_RSHIFT, bzw. KMOD_LSHIFT bestehen.
    Großbuchstaben abzufangen ist ja technisch nicht das Problem. hierzu muss man bei den Shift-Modifikatoren einfach 32 vom aktuellen Scancode eingeben.
    Unglücklicherweise ist aber der ASCII-Zeichensatz nicht so gestrickt, dass das überall funktioniert. Schon nen slash ist ein riesen Problem, vom Backslash garnicht zu reden..

    Kennt da wer ne Funktion um das abzufangen? Oder muss ich da dann doch alles selber machen ?



  • Scancodes sind einfach nicht dazu gedacht, sowas abzufragen. Die sind eben nur für einzelen Tastedrücke, bzw. Loslassen da, aber nicht zur Eingabe von (fliess-)Text. Du benutzt also das falsche Werkzeug.

    Bye, TGGC (Dem beste BdT)



  • http://sdldoc.csn.ul.ie/guideinputkeyboard.php

    da ist ein beispiel wie man an die Zeichen kommt.



  • jo, des kenn ich.

    @TGGC - war nen Formulierungsfehler meinerseits. Ich benutze keysym.sym.

    derzeit sieht das so aus

    ...
    	switch (e.type)
    	{
    	    case SDL_KEYDOWN:
    			ch =  e.key.keysym.sym;
    			if (e.key.keysym.mod && KMOD_SHIFT) 
    			     ch -= 32;
    			break;
    	    case SDL_KEYUP:
    			switch (ch)
    			{
    			    case 0:
    				break;
    			    case '\r':
    				gotfocus = 0;
    				break;
    			    case '\b':
    				text[strlen (text) - 1] = '\0';
    				break;
    			    default: 
    			    strncat (text, (char *)&ch, 1);
    			    break;
    			}
    			ch = 0;
    			break;
    	}
    ...
    

    bin damit aber eigentlich nicht so glücklich.. sollte doch irgendwie ne andere Lösung geben..



  • DocJunioR schrieb:

    jo, des kenn ich.

    dann solltest du's auch mal lesen 😉 Besonders "Example 3-11. Interpreting Key Event Information"



  • Oookay.. ich hatts zwar gelesen, war aber wohl unfähig, mich daran zu erinnern, dass der UNICODE auch aktiviert werden muss 😃

    Naja - vielleicht ist es ja doch nicht so gesund, 16 Stunden am Tag zu programmieren...


Anmelden zum Antworten