Pfeiltasten fangen

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Pfeiltasten fangen

Beitrag von naums » Fr Mär 19, 2010 5:43 pm

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?
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Pfeiltasten fangen

Beitrag von Jside » Fr Mär 19, 2010 5:58 pm

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.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Pfeiltasten fangen

Beitrag von naums » Fr Mär 19, 2010 6:15 pm

ö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.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Pfeiltasten fangen

Beitrag von Dirty Oerti » Fr Mär 19, 2010 6:22 pm

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
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pfeiltasten fangen

Beitrag von Xin » Fr Mär 19, 2010 7:50 pm

Curses gibt es soweit ich weiß unter Windows, da kannst Du also mal nach suchen. Bei ncurses bin ich mir nicht sicher.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Pfeiltasten fangen

Beitrag von naums » Fr Mär 19, 2010 10:52 pm

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
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Pfeiltasten fangen

Beitrag von stampuhh » Sa Mär 20, 2010 2:26 pm

Ä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
NachDenkSeiten.de

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Pfeiltasten fangen

Beitrag von Xin » Sa Mär 20, 2010 2:35 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Jside
Beiträge: 377
Registriert: Di Nov 11, 2008 12:56 am

Re: Pfeiltasten fangen

Beitrag von Jside » Sa Mär 20, 2010 3:57 pm

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...

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Pfeiltasten fangen

Beitrag von nufan » Sa Mär 20, 2010 5:20 pm

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? ^^

Antworten