Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Strzałki w ASCII

Ostatnio zmodyfikowano 2009-03-23 21:53
Autor Wiadomość
Patzick
Temat założony przez niniejszego użytkownika
Strzałki w ASCII
» 2009-03-23 19:34:24
Próbuję odczytać adresy strzałek i użyć tego w funkcjach ale coś mi nie wychodzi, bo adres strzałki np. lewej to klawisze: Ó - 32 oraz K- 75. Teraz mój program pobiera funkcją getch() znaki z klawiatury i przez switch case wybiera odpowiedni kod klawisza i wykonuje daną funkcję. Jeżeli dam case 32 albo 75, to wykona się funkcja, która miała zadania lewej strzałki, ale zostanie wprowadzony jeden z tych znaków i tak, bo one są zdefiniowane też do pisania liter Ó i K. No a muszą być zdefiniowane do pisania. Jest jakiś kod strzałek, dzięki któremu można pozbyć się tego dylematu?
P-4971
pekfos
» 2009-03-23 19:46:44
do góry 72, w dół 80, w lewo 75, w prawo 77.
do każdego z nich oczywiście kod 224 czyli klawisze specjelne
to kody strzałek, innych nie znam
//edit:
C/C++
int znak = getch()
switch( znak )
{
case 224:
    if( kbhit() )
    {
        znak = getch();
        switch( znak )
        {
        case 72:
            //strzałka w góre
            break;
            //..
        }
        break;
    }
    //Ó
    break;
case 72:
    //K
    break;
    //..
}

żadnego dylematu nie widze
P-4972
Patzick
Temat założony przez niniejszego użytkownika
» 2009-03-23 19:53:00
ale jak to sprawdzić przy użyciu funkcji getch(); tak, żeby była 1 zmienna? Najlepiej jakbyś mógł podać przykład :)

//EDIT
ok już sprawdzam ten przykład :)

//EDIT 2

niestety, nie działa :/
kod funkcji sprawdzającej
C/C++
void znaki_specjalne( int klawisz ) {
    switch( klawisz )
    {
    case 8:
        backspace();
        break;
    case 13:
        enter();
        break;
    case 224:
        if( kbhit() )
        {
            char znak = getch();
            switch( znak )
            {
            case 75:
                arrows( 75 ); //lewo
                break;
            case 72:
                arrows( 72 ); //góra
            case 77:
                arrows( 77 ); //prawo
                break;
            case 80:
                arrows( 80 ); //dół
                break;
                break;
            }; // switch
        }; //if
        break;
        default:
        pisanie();
        break;
    };
}
Po wciśnięciu strzałki zachowuje się jakby były wciśnięte Ó i K i tak wyświetla.
P-4973
pekfos
» 2009-03-23 20:15:07
C/C++
void znaki_specjalne( int klawisz ) {
    switch( klawisz )
    {
    case 8:
        backspace();
        break;
    case 13:
        enter();
        break;
    case 224:
        if( kbhit() )
        {
            int znak = getch();
            switch( znak )
            {
            case 75:
                arrows( 75 ); //lewo
                break;
            case 72:
                arrows( 72 ); //góra
            case 77:
                arrows( 77 ); //prawo
                break;
            case 80:
                arrows( 80 ); //dół
                break;
            }; // switch
            break;
        }; //if
        break;
        default:
        pisanie();
        break;
    };
}
niewiem czy to cos zmieni

//edit:

hmm.. daj kod funkcji arrows()
P-4974
Patzick
Temat założony przez niniejszego użytkownika
» 2009-03-23 20:21:14
niestety nic nie zmieniło.
To tak jakby on nie widział tego 224. Po wciśnięciu strzałki wyskakują 2 litery zależnie od strzałek.

//EDIT funkcja arrows tu nie wiele zmienia bo zależna jest od switcha, ale proszę jej wzór
C/C++
void arrows( int a ) {
    if( a == 75 ) { //lewa
        //kod
    }; //if
    /* ...*/
};
P-4975
pekfos
» 2009-03-23 20:29:48
hm.. pokaż kod funkcji pisanie()
P-4976
Patzick
Temat założony przez niniejszego użytkownika
» 2009-03-23 20:34:59
pisanie to prosta funkcja dodająca znak do stringa, nie sądzę, żeby miała tu jakieś znaczenie.
C/C++
void pisanie() {
    wiersz[ teraz_wiersz ] += klawisz;
}
po wciśnięciu strzałki w sumie ta funkcja wykonuje się 2 razy bo strzałka wyrzuca z siebie 2 wartości...
P-4977
pekfos
» 2009-03-23 20:39:56
sprawdź to:

C/C++
void znaki_specjalne( int & klawisz ) {
    switch( klawisz )
    {
    case 8:
        backspace();
        break;
    case 13:
        enter();
        break;
    case 224:
        if( kbhit() )
        {
            klawisz = getch();
            switch( znak )
            {
            case 75:
                arrows( 75 ); //lewo
                break;
            case 72:
                arrows( 72 ); //góra
            case 77:
                arrows( 77 ); //prawo
                break;
            case 80:
                arrows( 80 ); //dół
                break;
            }; // switch
            break;
            klawisz = 0;
        }; //if
        break;
        default:
        pisanie();
        break;
    };
}
P-4978
« 1 » 2
  Strona 1 z 2 Następna strona