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? |
|
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: int znak = getch() switch( znak ) { case 224: if( kbhit() ) { znak = getch(); switch( znak ) { case 72: break; } break; } break; case 72: break; } żadnego dylematu nie widze |
|
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 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 ); break; case 72: arrows( 72 ); case 77: arrows( 77 ); break; case 80: arrows( 80 ); break; break; }; }; break; default: pisanie(); break; }; } Po wciśnięciu strzałki zachowuje się jakby były wciśnięte Ó i K i tak wyświetla. |
|
pekfos |
» 2009-03-23 20:15:07 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 ); break; case 72: arrows( 72 ); case 77: arrows( 77 ); break; case 80: arrows( 80 ); break; }; break; }; break; default: pisanie(); break; }; } niewiem czy to cos zmieni //edit: hmm.. daj kod funkcji arrows() |
|
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 void arrows( int a ) { if( a == 75 ) { }; }; |
|
pekfos |
» 2009-03-23 20:29:48 hm.. pokaż kod funkcji pisanie() |
|
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. 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... |
|
pekfos |
» 2009-03-23 20:39:56 sprawdź to: 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 ); break; case 72: arrows( 72 ); case 77: arrows( 77 ); break; case 80: arrows( 80 ); break; }; break; klawisz = 0; }; break; default: pisanie(); break; }; } |
|
« 1 » 2 |