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

[C++] Implementacja klawisza Delete i Backspace

Ostatnio zmodyfikowano 2014-11-10 13:30
Autor Wiadomość
Malina94
Temat założony przez niniejszego użytkownika
[C++] Implementacja klawisza Delete i Backspace
» 2014-11-09 20:34:19
Chciałabym zrobić coś takiego, że gdy nacisnę klawisz Delete lub Backspace wywołam ukryte pod nimi funkcje usuwające znaki. Niestety nie wiem jak to poprawnie zrobić. Sam if/switch wyłapujący kod ascii nie działa. W jaki sposób można to zaimplementować?
P-120238
1aam2am1
» 2014-11-09 20:55:22
switch/if powinien zadziałać ale wszystko zależy od tego jak się wyłapuje znaki. Poczytaj o getch();
P-120239
Malina94
Temat założony przez niniejszego użytkownika
» 2014-11-09 22:26:35
Okej, na próbę zrobiłam takie proste coś:

C/C++
#include <iostream>
#include <conio.h>

using namespace std;


int main()
{
    int znak;
   
    while( 1 ) {
        znak = getch();
        if( znak == 127 ) {
            cout << "DELETE" << endl;
        } else if( znak == 8 ) {
            cout << "BACKSPACE" << endl;
        }
       
    }
   
    return 0;
}

Backspace działa, natomiast delete nie. Dlaczego?
P-120257
DejaVu
» 2014-11-09 23:40:38
P-120262
1aam2am1
» 2014-11-09 23:41:01
http://www.asciitable.com/index/asciifull.gif
P-120263
DejaVu
» 2014-11-10 01:14:35
getch() zwraca char nie int to po pierwsze po drugie to znak nr 27 nie 127.
@up: ciekawe...
http://linux.die.net/man/3​/getch:
C/C++
int getch( void );

http://msdn.microsoft.com​/pl-pl/library/078sfkak.aspx:
C/C++
int _getch( void );
wint_t _getwch( void );
P-120268
1aam2am1
» 2014-11-10 01:23:09
Offtop
P-120269
DejaVu
» 2014-11-10 01:27:31
(...) po drugie to znak nr 27 nie 127.
Ekhm...

C/C++
#include <iostream>
#include <conio.h>
int main()
{
    unsigned char znak;
    std::cout << "klawisz [ESC] wychodzi z programu." << std::endl;
    do
    {
        znak = getch();
        std::cout << "znak: '" << znak << "' kod: " << static_cast < int >( znak ) << std::endl;
        while( kbhit() )
        {
            znak = getch();
            std::cout << "*znak: '" << znak << "' kod: " << static_cast < int >( znak ) << std::endl;
        }
        std::cout << std::endl;
    } while( znak != 27 ); //ESC
   
    return( 0 );
}
klawisz [ESC] wychodzi z programu.
znak: 'Ó' kod: 224
*znak: 'S' kod: 83

Olej mała pomyłka z mojej strony. Pamięć zawodzi ma juz się te swoje lata. Mozna czegoś zapomnieć.
No to po co pisać posty, które propagują 100% błędnej informacji?
Delete składa się z dwóch znaków. Pierwszy 224, a drugi 83.
P-120270
« 1 » 2
  Strona 1 z 2 Następna strona