Eingabeformular in Konsolenanzeige?



  • Hallo zusammen,

    in einem bestimmten C++-Programm würde ich gern ein Eingabeformular definieren, also etwas, was wie folgt aussieht:

    Bitte geben Sie eine Zahl ein! [b][u]4321,444[/u][/b]
    
    Hinweistext Hinweistext Hinweistext Hinweistext
    
    Bitte wählen Sie unter den folgenden Optionen aus:
    
    [[b][u]x[/u][/b]] Verlängerung
    [ ] Elfmeterschießen
    [[b][u]x[/u][/b]] Fensterkitt
    
    [Zurück]                      [Weiter]
    

    Die unterstrichenen Teile (also die Zahl und die Kreuze) sollen vom Benutzer angegeben werden. Dieser sollte im Formular nach Herzenslust navigieren (z.B. mit Tab-Taste) und editieren können, bis er irgendwann die Eingabe mit Enter oder "[Weiter]" abschließt.

    Frage: Geht das in einer nicht-graphischen Anwendung, also in einem Konsolen-Programm überhaupt? Mir ist klar, dass es im Zweifel eine größere Sache ist, so etwas einzurichten. Allerdings fehlen mir bereits die ersten Ansatzpunkte, wie ich hier überhaupt vorgehen könnte.

    Für jedwede Hinweise bin ich Euch dankbar.



  • tollelege schrieb:

    Frage: Geht das in einer nicht-graphischen Anwendung, also in einem Konsolen-Programm überhaupt? Mir ist klar, dass es im Zweifel eine größere Sache ist, so etwas einzurichten. Allerdings fehlen mir bereits die ersten Ansatzpunkte, wie ich hier überhaupt vorgehen könnte.

    Mit Standard-Mitteln nicht. Es gibt aber Biblitoheken, die Farben, cursor-Navigation etc. in den gängigen Konsolen ermöglichen. Ein Beispiel ist ncurses


  • Mod

    tollelege schrieb:

    Frage: Geht das in einer nicht-graphischen Anwendung, also in einem Konsolen-Programm überhaupt? Mir ist klar, dass es im Zweifel eine größere Sache ist, so etwas einzurichten. Allerdings fehlen mir bereits die ersten Ansatzpunkte, wie ich hier überhaupt vorgehen könnte.

    Ja, natürlich geht das. Hast du so etwas noch nie gesehen?

    Du musst dafür jedoch ein Programm für eine Konsole erstellen und kein allgemeines C++-Programm (welches theoretisch auch auf einem Lochstreifenstanzer funktionieren würde). Das ist systemabhängig, bzw. abhängig von der Zielkonsole, welche wiederum vom System abhängt. Wohin darf ich dich verschieben?



  • SeppJ schrieb:

    Ja, natürlich geht das. Hast du so etwas noch nie gesehen?

    Schon, aber nicht den Code dazu.

    Wohin darf ich dich verschieben?

    Wo Du schon so nett fragst ... zählt das unter diesen Umständen hier schon als "Sytemprogrammierung"?
    Im Zweifel wäre das "Linux/Unix".



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Wenn's linuxartig ist, dann guck dir mal ncurses an.



  • Vielen Dank für die Hinweise. Habe ncurses mal in Betrieb genommen und ein bisschen damit herumprobiert.
    Als Referenz habe ich im Wesentlichen
    http://pronix.linuxdelta.de/C/Linuxprogrammierung/Linuxsystemprogrammieren_C_Kurs_Kapitel10.shtml
    verwandt.

    Etwas schade, dass die Bibliothek die ollen C-Strings verwendet - aber da kann man wohl nichts machen.

    Sehe ich das richtig, dass ich pro Bildschirmformular immer wieder neu definieren muss, was bei Tab, Backtab usw. geschehen soll, und auch selbst händisch Buch darüber führen muss, was wo eingetragen worden ist?



  • OK, als ersten Prototyp für meine Optionsliste zum Ankreuzen habe ich Folgendes zusammnen:

    initscr();
    	int anz_tabs = 2;
    	char eingabe[anz_tabs];
    	for (int i = 0; i< anz_tabs; ++i) {
    		stringstream ss;
    		ss << i; 	
    		mvprintw(12+i,12, (string("[ ] Option ") + ss.str()).c_str()); 
    		eingabe [i] = ' ';
    	} // for i
    	int pos = 0;
    	move(12,13);
    	int c;
    	keypad(stdscr, true);
    	do {
    		c = getch();	
    		if (c == KEY_UP) { 
    			--pos = pos % anz_tabs; 
    			move(12+pos,13);
    		} else if (c == KEY_DOWN) { 
    			++pos = pos % anz_tabs; 
    			move(12+pos,13);
    		} else if (c == KEY_RIGHT) ;
    		else eingabe [pos] = c;
    	} while (c != KEY_RIGHT) ;
    	endwin();
    

    Danach habe ich das Array "eingabe", dass ich dann verwenden kann.

    Ist das so in etwa die Art und Weise, wie man die Bib zu diesem Zweck verwendet?

    Ich habe das Gefühl, dass ich hier etwas im Dunkeln tappe.


Log in to reply