Input-Box



  • Hallo,

    Ich bin grad dabei ein GUI-System für Spiele zu coden.
    Dummerweise krieg ich aber keine Funktion zusammen, die aus den DInput-Scancodes char-Variablen macht.
    Nicht dass ihr denkt dass ich faul zum coden bin, ich habs echt schon mit allem möglichen probiert, aber es klappt einfach nicht.
    Um jetzt nicht code vorzulegen und auf Fehlersuche zu gehn, möchte ich, dass mir bitte kurz einen seinen Code postet.
    Vielen Dank!

    m.f.G. Daniel Lang



  • Dazu gab es schon ein paar Beiträge, mit DirectInput ist das demnach auch gar nicht möglich, dazu verwendet man WinAPI.



  • mach doch sowas:

    switch (scancode)
            {
                case DIK_A:
                    if (shift) return('A'); else return('a');
                case DIK_B:
                    if (shift) return('B'); else return('b');
                case DIK_C:
                    if (shift) return('C'); else return('c');
                case DIK_D:
                    if (shift) return('D'); else return('d');
                case DIK_E:
                    if (shift) return('E'); else return('e');
                case DIK_F:
                    if (shift) return('F'); else return('f');
                case DIK_G:
                    if (shift) return('G'); else return('g');
                case DIK_H:
                    if (shift) return('H'); else return('h');
                case DIK_I:
                    if (shift) return('I'); else return('i');
                case DIK_J:
                    if (shift) return('J'); else return('j');
                case DIK_K:
                    if (shift) return('K'); else return('k');
                case DIK_L:
                    if (shift) return('L'); else return('l');
                case DIK_M:
                    if (shift) return('M'); else return('m');
                case DIK_N:
                    if (shift) return('N'); else return('n');
                case DIK_O:
                    if (shift) return('O'); else return('o');
                case DIK_P:
                    if (shift) return('P'); else return('p');
                case DIK_Q:
                    if (shift) return('Q'); else if (alt) return('@'); else return('q');
                case DIK_R:
                    if (shift) return('R'); else return('r');
                case DIK_S:
                    if (shift) return('S'); else return('s');
                case DIK_T:
                    if (shift) return('T'); else return('t');
                case DIK_U:
                    if (shift) return('U'); else return('u');
                case DIK_V:
                    if (shift) return('V'); else return('v');
                case DIK_W:
                    if (shift) return('W'); else return('w');
                case DIK_X:
                    if (shift) return('X'); else return('x');
                case DIK_Y:
                    if (shift) return('Z'); else return('z');
                case DIK_Z:
                    if (shift) return('Y'); else return('y');
    
                case DIK_GRAVE:
                    if (shift) return('°'); else return('^');
                case DIK_1:
                    if (shift) return('!'); else if (alt) return('¹'); else return('1');
                case DIK_2:
                    if (shift) return('"'); else if (alt) return('²'); else return('2');
                case DIK_3:
                    if (shift) return('§'); else if (alt) return('³'); else return('3');
                case DIK_4:
                    if (shift) return('$'); else return('4');
                case DIK_5:
                    if (shift) return('%'); else return('5');
                case DIK_6:
                    if (shift) return('&'); else return('6');
                case DIK_7:
                    if (shift) return('/'); else if (alt) return('{'); else return('7');
                case DIK_8:
                    if (shift) return('('); else if (alt) return('['); else return('8');
                case DIK_9:
                    if (shift) return(')'); else if (alt) return(']'); else return('9');
                case DIK_0:
                    if (shift) return('='); else if (alt) return('}'); else return('0');
                case DIK_MINUS:
                    if (shift) return('?'); else if (alt) return('\\'); else return('ß');
                case DIK_EQUALS:
                    if (shift) return('`'); else return('´');
    
                case DIK_OEM_102:
                    if (shift) return('>'); else if (alt) return('|'); else return('<');
                case DIK_COMMA:
                    if (shift) return(';'); else return(',');
                case DIK_PERIOD:
                    if (shift) return(':'); else return('.');
                case DIK_SLASH:
                    if (shift) return('_'); else return('-');
                case DIK_SEMICOLON:
                    if (shift) return('Ö'); else return('ö');
                case DIK_LBRACKET:
                    if (shift) return('Ü'); else return('ü');
                case DIK_APOSTROPHE:
                    if (shift) return('Ä'); else return('ä');
                case DIK_RBRACKET:
                    if (shift) return('*'); else if (alt) return('~'); else return('+');
                case DIK_BACKSLASH:
                    if (shift) return('\''); else return('#');
    
                case DIK_TAB:
                    return(9);
                case DIK_BACKSPACE:
                    return(8);
                case DIK_RETURN:
                case DIK_NUMPADENTER:
                    return(13);
                case DIK_SPACE:
                    return(32);
    
                case DIK_UP:
                    return(1);
                case DIK_DOWN:
                    return(2);
    
                case DIK_NUMPAD1:
                    return('1');
                case DIK_NUMPAD2:
                    return('2');
                case DIK_NUMPAD3:
                    return('3');
                case DIK_NUMPAD4:
                    return('4');
                case DIK_NUMPAD5:
                    return('5');
                case DIK_NUMPAD6:
                    return('6');
                case DIK_NUMPAD7:
                    return('7');
                case DIK_NUMPAD8:
                    return('8');
                case DIK_NUMPAD9:
                    return('9');
                case DIK_NUMPAD0:
                    return('0');
                case DIK_DIVIDE:
                    return('/');
                case DIK_MULTIPLY:
                    return('*');
                case DIK_SUBTRACT:
                    return('-');
                case DIK_ADD:
                    return('+');
            }
        }
    


  • @nman

    geht nicht gibts nicht!



  • ... und so sachen wie automatische tastenwiederholung (wiederholungsverzögerung/-schnelligkeit), ländercodes, etc. muss man natürlich noch extra programmieren. aber fürs erste sollte das ausreichen.



  • Dieser Beitrag wurde gelöscht!


  • Original erstellt von Fireface:
    **
    Nicht dass ihr denkt dass ich faul zum coden bin, ich habs echt schon mit allem möglichen probiert, aber es klappt einfach nicht.
    Um jetzt nicht code vorzulegen und auf Fehlersuche zu gehn, möchte ich, dass mir bitte kurz einen seinen Code postet.**

    Mir kommen die Tränen, such mal in der MSDN, da gibt's IMHO ne passende Fkt.



  • @nman und tggc

    na ihr superhelden, dann sagt fireface doch mal ein paar stichwörter/funktionen die ihm behilflich sein könnten. immer diese rumprahlerei! wenn winapi soviel besser ist, dann postet doch mal code aus euren engines.



  • Da bin ich froh dass es Leute wie KXII gibt, die auch wirklich code posten und nicht sagen dass man die Funktion X und Y braucht oder darauf hinweisen dass irgendwo in der MSDN was ähnliches steht.
    Denkt ihr etwa nicht, dass ich den weg dorthin schon gefunden hab?
    Ich werd jetzt das ganze mit einer switch machen...
    Vielen Dank an alle!



  • @nman:
    Den ganzen Stuff (ich darf kein Schimpfwort verwenden) hab ich schon fertig, weil meine eigene Funktion auch funktionierte. Nur hängte die sich bei einigen Buchstaben auf...



  • Noch eine Frage:
    Ich krieg von DInput ja einen Scancode, aber eigentlich bekomm ich ein Array aus 256 Einträgen. Welcher davon ist der Scancode?



  • Original erstellt von Fireface:
    Noch eine Frage:
    Ich krieg von DInput ja einen Scancode, aber eigentlich bekomm ich ein Array aus 256 Einträgen. Welcher davon ist der Scancode?

    Ich glaube, da hast Du etwas grundsätzlich nicht verstanden! DirectInput liefert Dir ganz einfach den Status JEDER Taste, mehr nicht. Und genau das ist das Array. Da gibt es keinen Scancode.

    [ Dieser Beitrag wurde am 12.05.2003 um 16:16 Uhr von TomasRiker editiert. ]



  • Bist du David Schergen?
    Jedenfalls glaub ich hab ichs jetzt verstanden.
    Korrigiert mich bitte wenn ich falsch liege:
    Ich prüfe das 256-Felder-Array mit 0x80 und wenn das TRUE ist, dann weis ich, dass diese Taste gedrückt ist.
    Dann breche ich die Schleife ab und nehme den Index-Wert vom Array als Scancode her.
    Jetzt kommt die Switch-Anweisung ins Spiel und voila müsste ich einen char haben. stimmts?



  • Original erstellt von KXII:
    **@nman und tggc

    na ihr superhelden, dann sagt fireface doch mal ein paar stichwörter/funktionen die ihm behilflich sein könnten. immer diese rumprahlerei! wenn winapi soviel besser ist, dann postet doch mal code aus euren engines.**

    Den Code den ich benutze, kannst du dir auf meiner HP runterladen, doch dazu müsste man ja erstmal so'n Superheld sein, das man einen Browser bedienen kann. Ich sag immer: Dumm stellen gilt nicht.



  • Original erstellt von Fireface:
    Bist du David Schergen?
    Jedenfalls glaub ich hab ichs jetzt verstanden.
    Korrigiert mich bitte wenn ich falsch liege:
    Ich prüfe das 256-Felder-Array mit 0x80 und wenn das TRUE ist, dann weis ich, dass diese Taste gedrückt ist.
    Dann breche ich die Schleife ab und nehme den Index-Wert vom Array als Scancode her.
    Jetzt kommt die Switch-Anweisung ins Spiel und voila müsste ich einen char haben. stimmts?

    Ja, ja und ja 🙂



  • @tggc

    ich weiss, daß du eine hp hast, und dass es da unter anderem quellcode zum dl gibt. aber nicht ICH bin es, der hier hilfe braucht, sondern fireface, und ICH werde ganz bestimmt keinen link auf DEINE hp hier posten, dass musst du schon selber machen!

    mit superheld meine ich, dass es hier immer wal wieder leute gibt, die ganz groß rumschreien, JA ICH WEISS WIE ES GEHT, es dann aber dabei belassen, und keine weitere hilfestellung geben. den betroffenen interessiert es aber wahrscheinlich nicht, wer hier im forum alles was kann; er möchte konkrete, direkte hilfestellung!

    wenn jeder hier im forum der etwas ahnung hat, zu allen beiträgen schreiben würde: "ich weiss eine antowrt auf dein problem, aber ich sag sie dir nicht", dann würde zum einen sich hier niemand mehr zurecht finden und zum andern würde die qualität dieses forums stark darunter leiden!

    ich hoffe du verstehst das problem.



  • KXII: Ich habe in meinem ersten Post geschrieben dass sich pure WinAPI dazu am Besten eignet, was gibts daran nicht zu verstehen?

    Und schau Dir mal TGGCs Signatur an, da steht was drinnen was mit "http://" beginnt, könnte das uU ein URL sein?



  • wer lesen kann ist klar im vorteil!



  • nman als tggc, ihr beide habt es nicht geschafft auf meine antwort SINNVOLL zu antworten. stattdessen sucht ihr euch einfach ein thema aus, so wie es euch gerade passt egal ob es was mit dem zu tun hat, was ich gerade vorher gesagt habe und fangt dann an hysterisch rumzuschreien!

    aber das kann ja mal vorkommen. es sei euch verziehen!

    grüßchen

    KXII



  • TGGC ist ein Trottel. Ignoriert ihn.


Anmelden zum Antworten