"Menü" mittels Konsole?
- starcow
- Establishment
- Beiträge: 528
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Kontaktdaten:
"Menü" mittels Konsole?
Ich wusste jetzt nicht, wie ich es als Thread-Titel griffiger hätte auf Punkt bringen können...
"Früher" hatte man doch Programme, die sich irgendwie ausschliesslich dem "Konsolen-Character-Set" bedient haben. Oftmals waren z. B. die Installations- und Konfigurations-Menüs in alten Dos-Spielen so gelöst. Oder IDE's wie Quick-Basic. Ihr erinnert euch...
Gibt es vielleicht eine Möglichkeit, solche Menüs als Konsolen-Programm zu realisieren? Oder ist es sogar so, dass diese Programme tatsächliche nur Konsolen-Programme sind und der Output reiner Konsolen Output ist?
Bisher hatte ich irgendwie keine Möglichkeit gefunden, sowas wie ein "Fortschrittsbalken" in der Konsole zu realiseren. Dazu müsste man ja irgendwie den Bildschirm löschen können.
Wenn man das könnte, hätte man doch eine Art Möglichkeit, plattformunabhängige Programme zu erstellen, die trotzdem eine Art Menü aufweisen. Also Programme, die ganz ohne externe OS-API's auskommen.
"Früher" hatte man doch Programme, die sich irgendwie ausschliesslich dem "Konsolen-Character-Set" bedient haben. Oftmals waren z. B. die Installations- und Konfigurations-Menüs in alten Dos-Spielen so gelöst. Oder IDE's wie Quick-Basic. Ihr erinnert euch...
Gibt es vielleicht eine Möglichkeit, solche Menüs als Konsolen-Programm zu realisieren? Oder ist es sogar so, dass diese Programme tatsächliche nur Konsolen-Programme sind und der Output reiner Konsolen Output ist?
Bisher hatte ich irgendwie keine Möglichkeit gefunden, sowas wie ein "Fortschrittsbalken" in der Konsole zu realiseren. Dazu müsste man ja irgendwie den Bildschirm löschen können.
Wenn man das könnte, hätte man doch eine Art Möglichkeit, plattformunabhängige Programme zu erstellen, die trotzdem eine Art Menü aufweisen. Also Programme, die ganz ohne externe OS-API's auskommen.
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: "Menü" mittels Konsole?
Du kannst Steuerzeichen ausgeben, die den Cursor (und damit die Stelle, wo Deine nächste Ausgabe losgeht) bewegen. Auf die Schnelle habe ich nur \r ergoogeln können, das setzt den Cursor an den Anfang der Zeile. Also zum Beispiel für nen Fortschrittsbalken
Der printed also den Fortschrittsbalken mit 2X und geht dann gleich zurück an den Anfang der Zeile. 400ms später überschreibt dann die nächste Zeile mit einem X mehr all Deine Zeichen und setzt am Ende wieder den Cursor an den Anfang zurück. Und so weiter.
Gibt auch ein Steuerzeichen für "gehe eine Zeile hoch", und damit kannst Du dann mehrzeilige Sachen updaten, wie z.B. ein Menü
Achja, und es ist evtl. nötig, zu flushen, weil der sonst zeilenweise buffert und Du somit nie was von Deiner Ausgabe siehst. fflush( stdout); fällt mir da auf die Schnelle ein, aber das kannst Du sicher googeln.
Code: Alles auswählen
printf( "XX00000000\r");
std::this_thread::wait(400ms);
printf( "XXXX000000\r");
std::this_thread::wait(400ms);
printf( "XXXXX00000\r");
Gibt auch ein Steuerzeichen für "gehe eine Zeile hoch", und damit kannst Du dann mehrzeilige Sachen updaten, wie z.B. ein Menü
Achja, und es ist evtl. nötig, zu flushen, weil der sonst zeilenweise buffert und Du somit nie was von Deiner Ausgabe siehst. fflush( stdout); fällt mir da auf die Schnelle ein, aber das kannst Du sicher googeln.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- xq
- Establishment
- Beiträge: 1581
- Registriert: 07.10.2012, 14:56
- Alter Benutzername: MasterQ32
- Echter Name: Felix Queißner
- Wohnort: Stuttgart & Region
- Kontaktdaten:
Re: "Menü" mittels Konsole?
ANSI Escape Sequenz ist hier das richtige Schlüsselwort, um crossplatform vernünftige Kontrolle über die Konsole zu haben. Oder direkt Libraries wie ncurses, welche dir das ganze abnimmt und quasi einen virtuelle Character-Framebuffer anbietet (und auch gleich das ganze UI mit)
Unter Windows kann man auch die Konsole direkt als Character-Framebuffer bearbeiten, hier ist WriteConsole und SetConsoleCursorPosition die richtigen Stichworte
Unter Windows kann man auch die Konsole direkt als Character-Framebuffer bearbeiten, hier ist WriteConsole und SetConsoleCursorPosition die richtigen Stichworte
War mal MasterQ32, findet den Namen aber mittlerweile ziemlich albern…
Programmiert viel in
Zig
und nervt Leute damit.
Programmiert viel in
Re: "Menü" mittels Konsole?
Für Fortschrittsbalken oder Prozentangaben hab ich mit \r immer gute Erfahrungen gemacht, das ist ziemlich simpel zu verwenden.
Ich frage mich, was eigentlich deine Motivation ist? Wie schon erwähnt, hat man mit Bibliotheken wie ncurses sehr viel einfacher Kontrolle über die Ausgabe und kann damit viel machen. Aber wieso sollte das besser oder plattformunabhängiger sein, als andere Lösungen? Ich meine, der Compiler liefert dir halt für jede Plattform einfach eine Implementierung der Standardbibliothek mit - also eine plattformabhängige Bibliothek, deren Interface aber überall gleich ist. Letztendlich machen andere Bibliotheken wie z.B. Qt also genau das selbe, der einzige Unterschied ist, dass du sie erst noch installieren musst.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
-
- Establishment
- Beiträge: 135
- Registriert: 29.08.2003, 14:22
- Kontaktdaten:
Re: "Menü" mittels Konsole?
Visual Studio bietet in der stdio.h (meine ich zumindest dass es diese war) die Funktion gotoxy(int x, int y) mit der man den Cursor in der Konsole beliebig versetzen kann. So weit ich weiß ist das aber kein Standard.
>>> http://www.bug-soft.net <<<
- starcow
- Establishment
- Beiträge: 528
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Kontaktdaten:
Re: "Menü" mittels Konsole?
Interessant, danke! Damit lässt sich bereits etwas mehr machen :-)
Ich nehme an, farbige Textausgabe lässt sich nicht ohne seperate Bibliotheken realiseren.
Edit:
Ich verstehe was du meinst Jonathan - da hast du eigentlich auch recht.
Gruss starcow
Ich nehme an, farbige Textausgabe lässt sich nicht ohne seperate Bibliotheken realiseren.
Ich verfolge jetzt nichts Konkretes. Es geht mir blos darum, den Gestaltungsspielraum etwas zu vergrössern. Also mit "Board-Mitteln", ohne externe Bibliotheken für kleinere Programme dazu einbinden zu müssen.Jonathan hat geschrieben: ↑04.05.2021, 16:48 Ich frage mich, was eigentlich deine Motivation ist? Wie schon erwähnt, hat man mit Bibliotheken wie ncurses sehr viel einfacher Kontrolle über die Ausgabe und kann damit viel machen. Aber wieso sollte das besser oder plattformunabhängiger sein, als andere Lösungen? Ich meine, der Compiler liefert dir halt für jede Plattform einfach eine Implementierung der Standardbibliothek mit - also eine plattformabhängige Bibliothek, deren Interface aber überall gleich ist. Letztendlich machen andere Bibliotheken wie z.B. Qt also genau das selbe, der einzige Unterschied ist, dass du sie erst noch installieren musst.
Edit:
Ich verstehe was du meinst Jonathan - da hast du eigentlich auch recht.
Gruss starcow
- Schrompf
- Moderator
- Beiträge: 4859
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas Ziegenhagen
- Wohnort: Dresden
- Kontaktdaten:
Re: "Menü" mittels Konsole?
Doch, Farbe geht auch. Das macht man über so obskure Textfragmente "[m\16x" oder so... müsste ich auch erst googeln.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- starcow
- Establishment
- Beiträge: 528
- Registriert: 23.04.2003, 17:42
- Echter Name: Mischa Schaub
- Kontaktdaten:
Re: "Menü" mittels Konsole?
Tatsächlich! Danke für den Hinweis! (-:
Ascheinend muss man allerdings unter Windows dazu die Konsole irgendwie in einen speziellen Modus setzen. Ich glaube in anderen Betriebssystemen wird das per default unterstützt.
Ascheinend muss man allerdings unter Windows dazu die Konsole irgendwie in einen speziellen Modus setzen. Ich glaube in anderen Betriebssystemen wird das per default unterstützt.