Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionstasten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.03.2006, 16:53 Uhr
Poffelnator



Ich bin gerade dabei mit Visual Studio 6 ein Konsolenprogramm zu schreiben. In diesem soll ein Menü nur durch Pfeiltasten gesteuert werden, diese wollte ich mit welche_taste = getch() abfragen. Nun habe ich nach einigen Versuchen festgestellt, das ich dann immer zwei Werte erhalte. Wie muss ich mit den beiden werden umgehen, kann ich den ersten immer ignorieren? Oder ist vielleicht die Funktion getch ungeeignet zur Abfrage von Funktionstasten? Wie würde man sonst die Funktions bez Pfeiltasten abfragen?
P.S. Ich verwende keine Funktionen der WinApi, will das auch nicht wirklich ändern.
Hier an dieser Stelle schon einmal danke für eure Antworten.

P.P.S. Dies ist ein crosspost
www.spotlight.de/nzforen/cpp/m/cpp-1143106430-4039.html

P.P.P.S. Sorry ich bin der Gast der sich nicht einloggen konnte, kann man das wieder löschen??? Dachte nicht, dass das auf einmal so einfach geht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.03.2006, 01:42 Uhr
Hans
Library Walker
(Operator)


Hi,

habe mal das Beispielprogramm zur getch()-Funktion aus der Borlandhilfe etwas erweitert:

C++:
#include <conio.h>
#include <stdio.h>

int main(void)
{
  int c;
  int extended = 0;
  c = getch();
  if (!c)
    extended = getch();
  if (extended)
    printf("The character is extended: %02x %02x\n", extended, c);
                                           /* Hier jeweils um die  Ausgabe */
  else                                     /* der einzelnen Zeichen erweitert.*/
    printf("The character isn't extended: %02x %02x\n", extended, c);

  return 0;
}



Wenn Du damit ein wenig experimentierst, findest Du die Lösung fast schon allein.

Edit: Bei mir liefert es
für die "Pfeil hoch"-Taste (Cursor aufwärts): 48 00
und
für die "Pfeil runter"-Taste (Cursor abwärts): 50 00

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 28.03.2006 um 01:48 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.03.2006, 12:35 Uhr
Poffelnator



Der Code geht leider bei mir nicht, ich erhalte immer bei jeder Taste der Tastatur „The character isn't extended „. Wird bestimmt an Unterschiede zwischen Borland Visual Studio 6 liegen. Ich versteh auch nicht wie if (!c) funktionieren sollte, es findet doch kein Vergleich statt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.03.2006, 16:45 Uhr
Hans
Library Walker
(Operator)


Hi,

if (!c) ist das gleiche wie if (c == 0) , also die C-typische Kurzschreibweise davon.
Sieh mal in Deiner Anleitung nach, was da so alles über getch() drin steht. Ansonsten fällt mir nur noch ein, direkt die BIOS-Funktionen aufzurufen. Aber das könnte sehr umständlich werden, weil Du Dich dann evtl. auch mit Tastatur-scancodes beschäftigen musst.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.03.2006, 16:53 Uhr
Tommix



Hallo,

Zitat von MSDN:

... When reading a function key or an arrow key, _getch and _getche must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.


Quelle

Also müßte es irgenwie so gehen

C++:
char taste = _getch();

if ((taste == 0) || (taste == 0xE0))
{
    taste = _getch();
    switch(taste)
    (
       // usw



Gruß, Tommix

Dieser Post wurde am 28.03.2006 um 16:58 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: