Supportnet / Forum / Anwendungen(Java,C++...)
C++ Tastaturabfrage
Frage
Hallo Leute,
ich hab n kleines Problem.
Ich möchte die Sondertasten (Backspace, Cursortasten usw.) in eines Switch Case anweisung abfragen um dann eine Aktion zu starten.
Aber als was muß ich z.b die Backspacetaste im c case '???' abfragen ?
Oder muß man das anders lösen ?
thx
bye
Antwort 1 von semi
Siehe WINUSER.H (VK_BACK, VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN usw.)
z.B.
Gruß,
Michael
z.B.
...
case VK_BACK:
...
break;
case VK_LEFT:
...
break;
usw.Gruß,
Michael
Antwort 2 von Redhawk
Hi, danke für die Antwort, leider nicht das was ich brauche.
Ich arbeite mit dem c++ von Borladn V3.1
Das gibts da nicht.
Ich "MUSS" die sachen als ascii-Zeichen einlesen und damit arbeiten, sind vorgaben :-(
Hat da jemand ne idee?
THX
Ich arbeite mit dem c++ von Borladn V3.1
Das gibts da nicht.
Ich "MUSS" die sachen als ascii-Zeichen einlesen und damit arbeiten, sind vorgaben :-(
Hat da jemand ne idee?
THX
Antwort 3 von semi
Die Konstanten in winuser.h sind doch die Tastaturcodes der entsprechenden Tasten.
Wenn Du es doch selber machen möchtest (die Tastencodes kannst Du dir trotzdem abgucken), dann wie folgt:
In den Include-Dateien des Borland Compilers gibt es die Konstanten bestimmt auch.
Gruß,
Michael
Wenn Du es doch selber machen möchtest (die Tastencodes kannst Du dir trotzdem abgucken), dann wie folgt:
const char VK_BACK = (char)0x08;
const char VK_LEFT = (char)0x25;
const char VK_UP = (char)0x26;
const char VK_RIGHT = (char)0x27;
const char VK_DOWN = (char)0x28;oder besser
const int VK_LEFT = 0x25;
...
In den Include-Dateien des Borland Compilers gibt es die Konstanten bestimmt auch.
Gruß,
Michael
Antwort 4 von Redhawk
Hi, ja ist eine gute idee nur scheint das so nicht zu gehen.. die Abfrage scheint die Sonertasten nicht zu erkennen?!!?!?
ich post mal mein prog.
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
char zeichen,eingabe[12];
long ganzzahl;
int max=10;
eingebbare Zeichenlaenge
int i=0,zahl=0,imax;
const char cr_lk = 0x75;
const char cr_rh = 0x77;
const char backsp = 0x08;
const char entf = 0x83;
const char esc = 0x27;
void main (void) // Hauptschleife
{
clrscr();
printf("Bitte geben Sie eine ganze Zahl ein : ");
do
{
vergleich();
zeichen=getch();
switch(zeichen)
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if (i<max)
{
zahl=1;
eingabe=zeichen;
printf("%c",zeichen);
i++;
}
break;
case '-':
if (zahl==0)
{
zahl=1;
eingabe=zeichen;
printf("%c",zeichen);
i++;
}
break;
case cr_lk: // Cursor nach Links setzten und Z„hler verkleinern
if (zahl!=0 && i>0) // Nur m”glich wen šberhaupt eine Eingabe erfolgt
{
printf("\b"); // Cursor einen nach links setzen
i--;
}
break;
case cr_rh: // Abfrage fr Cursor Rechts,ohne die
if (i!=max) // Daten im Arrey zu berschreiben (erst nach neueingabe)
{
printf("%c",eingabe); // Schreibt die Arryposition aus.
i++;
}
break;
usw..
ich post mal mein prog.
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
char zeichen,eingabe[12];
long ganzzahl;
int max=10;
eingebbare Zeichenlaenge
int i=0,zahl=0,imax;
const char cr_lk = 0x75;
const char cr_rh = 0x77;
const char backsp = 0x08;
const char entf = 0x83;
const char esc = 0x27;
void main (void) // Hauptschleife
{
clrscr();
printf("Bitte geben Sie eine ganze Zahl ein : ");
do
{
vergleich();
zeichen=getch();
switch(zeichen)
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
if (i<max)
{
zahl=1;
eingabe=zeichen;
printf("%c",zeichen);
i++;
}
break;
case '-':
if (zahl==0)
{
zahl=1;
eingabe=zeichen;
printf("%c",zeichen);
i++;
}
break;
case cr_lk: // Cursor nach Links setzten und Z„hler verkleinern
if (zahl!=0 && i>0) // Nur m”glich wen šberhaupt eine Eingabe erfolgt
{
printf("\b"); // Cursor einen nach links setzen
i--;
}
break;
case cr_rh: // Abfrage fr Cursor Rechts,ohne die
if (i!=max) // Daten im Arrey zu berschreiben (erst nach neueingabe)
{
printf("%c",eingabe); // Schreibt die Arryposition aus.
i++;
}
break;
usw..
Antwort 5 von Redhawk
HI,
ich habs !
die constanten dürfen nur so deklariert werden:
const esc = 27;
nur mit backspace ( asci 8 ? ) gehts noch net
nur die 8 erkennt er nicht und 08 meckert er rum..
thx
bye
ich habs !
die constanten dürfen nur so deklariert werden:
const esc = 27;
nur mit backspace ( asci 8 ? ) gehts noch net
nur die 8 erkennt er nicht und 08 meckert er rum..
thx
bye
Antwort 6 von semi
Teste mal, was für Ausgabe kommt. Übrigens, const kannst Du nicht verwenden, da Dein Programm nicht in C++ sondern C geschrieben ist. Wenn überhaupt Konstanten in C, dann mit #define
Gruß,
Michael
#include <stdio.h>
int main(int argc, char **argv)
{
int c = getch();
printf("hex: 0x%x, dec: %d", c, c);
return 0;
}Gruß,
Michael
Antwort 7 von Redhawk
Hi,
ja also soweit läuft mein prog jetzt :-)
nur noch mal eine andere Frage dazu.
Wenn ESC gedrückt wird, soll das programm ganz abbrechen. Mit Break komme ich ja nur aus der Schleife raus...
Gibts da einen Befehl für ?
thx
ja also soweit läuft mein prog jetzt :-)
nur noch mal eine andere Frage dazu.
Wenn ESC gedrückt wird, soll das programm ganz abbrechen. Mit Break komme ich ja nur aus der Schleife raus...
Gibts da einen Befehl für ?
thx
Antwort 8 von semi
return, exit, kill, gpf_now, reboot
eines davon wird hinhauen :-)
eines davon wird hinhauen :-)
Antwort 9 von Redhawk
Hi,
jo danke, hab jetzt alles hinbekommen :-)
thx
jo danke, hab jetzt alles hinbekommen :-)
thx
Antwort 10 von semi
Du kannst auch goto verwenden :)
int main(...)
{
alloc_ressources();
...
for(;;)
{
...
for(;;)
{
...
goto END;
}
}
END:
free_ressources();
return 0;
}Antwort 11 von Antiflasche
Ihr seid alles Pfeifen.#define wird nie funktionieren und die Konstanten VK_LEFT... wurden schon in einer anderen Bibliothek definiert.

