Seite 1 von 2

Pfeiltasten fangen

Verfasst: Fr Mär 19, 2010 5:43 pm
von naums
ich will ein Konsolenprogramm schreiben, in dem man Auswahlmöglichkeiten mithilfe von Pfeiltasten erreichen soll. Also ungefähr so:
Frage: Sind sie einverstanden?

[JA]
nein
In dem Fall wäre "[JA]" markiert. Nun soll der Nutzer Pfeiltaste unten drücken können und der "Cursor" (hier: "[...]") soll nach unten springen.
Zum "nein" => "[NEIN]". Wie mache ich das?

Re: Pfeiltasten fangen

Verfasst: Fr Mär 19, 2010 5:58 pm
von Jside
ncurses?

Ansonsten ganz normal die Tasten mit getch() auslesen, wobei die Pfeiltasten da irgendeine zuordung haben werden, am besten einfach den hex Code der gedrückten Taste ausgeben, und schauen, was bei den Pfeiltasten ausgegeben wird.

Wenn das Ja Nein in einer Zeile stehen, kannste den Cursor mit \r zurücksetzen, und dann halt entsprechend neu ausgeben, mit mehreren Zeilen wird das schon schwieriger, da musst du entweder ncurses oder eine andere TUI library benutzen, ansonsten geht das __soviel ich weiß__ nicht so ohne weiteres.

Re: Pfeiltasten fangen

Verfasst: Fr Mär 19, 2010 6:15 pm
von naums
öhm... ncurses... gibts das NUR unter Linux? Und geht das unter Windows und Linux? Na das könnte auch ne Art While schleife sein, also

Code: Alles auswählen

 while (Nicht enter gedrückt)
{
   if (cursor=true)
   {
      std::cout << "[JA]" << std::cout << "nein";
   }
   else
   {
      std::cout << "ja" << std::cout << "[NEIN]"
   }
   getchar();
}
oder so in der Art.

Re: Pfeiltasten fangen

Verfasst: Fr Mär 19, 2010 6:22 pm
von Dirty Oerti
naums hat geschrieben:öhm... ncurses... gibts das NUR unter Linux? Und geht das unter Windows und Linux? Na das könnte auch ne Art While schleife sein, also

Code: Alles auswählen

 while (Nicht enter gedrückt)
{
   if (cursor=true)
   {
      std::cout << "[JA]" << std::cout << "nein";
   }
   else
   {
      std::cout << "ja" << std::cout << "[NEIN]"
   }
   getchar();
}
oder so in der Art.
Und du feuerst die CPU, die das bearbeiten muss auf 100% raus, nur um ständig zu gucken, ob eine Taste neugedrückt werden muss..
Außerdem musst du ja den kompletten Textbuffer neuschreiben, sonst bekommst du schnell durchlaufende Linien mit deinem Code da..
Und da kommt dann ein weiteres Problem auf dich zu: Was passiert, wenn der BÖSE Benutzer die Größe des Konsolenfensters verändert... ? ;)
-> Keine gute Idee

Re: Pfeiltasten fangen

Verfasst: Fr Mär 19, 2010 7:50 pm
von Xin
Curses gibt es soweit ich weiß unter Windows, da kannst Du also mal nach suchen. Bei ncurses bin ich mir nicht sicher.

Re: Pfeiltasten fangen

Verfasst: Fr Mär 19, 2010 10:52 pm
von naums
ncurses gibts unter Linux, das weiß ich....

Ähm und @Dirty Oerti:
Größenänderung der Konsole geht glaub ich schon ab XP net mehr... bei Vista und 7 gehts auf keinen Fall.... unter Linux... naja, wäre ja au net so schlimm, gibt ja ANSI Steuerungszeichen...

Curses (bzw. ncurses) schau ich mir mal an xD

Re: Pfeiltasten fangen

Verfasst: Sa Mär 20, 2010 2:26 pm
von stampuhh
Ähm und @Dirty Oerti:
Größenänderung der Konsole geht glaub ich schon ab XP net mehr... bei Vista und 7 gehts auf keinen Fall.... unter Linux... naja, wäre ja au net so schlimm, gibt ja ANSI Steuerungszeichen...
Maus an den Rand anlegen, drücken und ziehen. In die Höhe geht es bei mir auf jeden Fall und in der Horizontalen kann ich auch verändern. Zumindest kleiner machen. Ach ja habe Windows 7. Also so ganz abwegig ist das nicht ;)
Und ansonsten kann man ja das ganze Layout auch noch umstellen bei Win7

Aber so etwas zum verändern der Ausgabe hab ich neulich auch mal gesucht. Gut zu wissen, dass so was geht^^

gruß stampuhh

Re: Pfeiltasten fangen

Verfasst: Sa Mär 20, 2010 2:35 pm
von Xin
Hat jemand Erfahrungen hier mit (N)Curses?

Ich habe nur mal ganz kurz da reingeschaut, aber bin damals daran gescheitert, das einmalige Drücken der Escape-Taste abzufangen.
Die Lösung dieses Problems könnte ich heute noch gebrauchen.

Re: Pfeiltasten fangen

Verfasst: Sa Mär 20, 2010 3:57 pm
von Jside
Xin hat geschrieben:Hat jemand Erfahrungen hier mit (N)Curses?

Ich habe nur mal ganz kurz da reingeschaut, aber bin damals daran gescheitert, das einmalige Drücken der Escape-Taste abzufangen.
Die Lösung dieses Problems könnte ich heute noch gebrauchen. Wenn ich mich recht entsinne, habe ich die Pfeiltasten erfolgreich abfangen können.

(unter Linux)
Also ich hab mal ganz kurz, mit ncurses gearbeitet, hatte es auch mal gschafft eine menuleiste hinzubekommen, ist mir dann aber zu nervig geworden. ESC kann man glaubisch(!) garnicht in ncurses abfangen, aber ncurses ist ja nicht sonderlich gut von der Tutorial Seite aus gesehen dokumentiert, v.d. Sources durchlesen, und probieren trifft da ehr zu...

Re: Pfeiltasten fangen

Verfasst: Sa Mär 20, 2010 5:20 pm
von nufan
Xin hat geschrieben:Hat jemand Erfahrungen hier mit (N)Curses?

Ich habe nur mal ganz kurz da reingeschaut, aber bin damals daran gescheitert, das einmalige Drücken der Escape-Taste abzufangen.
Die Lösung dieses Problems könnte ich heute noch gebrauchen.
Erfahrung damit hab ich keine, die Lösung für das Escape-Problem scheint mir aber einfach. Hier das leicht veränderte Wikipedia-Beispiel (mit Hilfe des Wikipedia-Tutorials), das erst beendet wird, wenn Escape gedrückt wird:

Code: Alles auswählen

#include <curses.h>

int main ()
{

  initscr ();
  printw ("Hallo Welt!\n");
  refresh ();
  noecho ();        // Eingaben nicht anzeigen
  
  while (getch () != 27);  // solange Zeichen einlesen, bis Escape gedrückt wird
  
  endwin ();
  return 0;
 
}

EDIT:
@Xin: Sorry, Mod-Noob-Fail... :oops:
Muss denn der "Ändern"-Button genauso aussehen wie der "Zitieren"-Button? ^^