[C++] Menü erstellen

J!0X

Ensign
Registriert
Juni 2005
Beiträge
147
Soweit ich weis, bzw. gesehen habe, kann man ein Auswahlmenü in DOS erstellen.
Also ich meine diese Rahmen aus Sonderzeichen und ein Menü, dass man per Pfeiltasten bedienen kann.
Kann mir jemand weiterhelfen?
MfG
J!0X
 
AW: [C++]Menü erstellen

Hallo J!0X,

sofern Du keine Bibliotheken hast die Dir diese Funktionalität bereitstellen, musst Du das komplett selber entwickeln.

D.h. das Menü inclusive Rahmen z.B. unter Verwendung der ASCII Sonderzeichen zeichnen.
Ausserdem die Menüsteuerung, d.h. das der ausgewählte Eintrag invertiert ist und die anderen nicht, ist selber zu implementieren.

Damit das ganze ansprechend ausssieht benötigst du Funktionen wie Bildschirm löschen, oder besser noch Teilbereiche des Bildschirms löschen, Zeichen an Position x,y zeichnen und eine Tastaturabfrage.

MfG

Arnd
 
AW: [C++]Menü erstellen

Leider kenne ich mich noch nicht ausreichend mit C++ aus, um Farben zu implementieren :p
 
Das hat auch mit C++ erst mal gar nichts zu tun. Mittels der Console Funktionen lassen sich auch keine Farben erzeugen.

Zum einen können Farben z.B. durch bestimmte Steuerzeichen erzeugt werden, sofern die Console z.B. ein VT 100 Terminal emuliert. Oder Du schaltest in einen Farbmodus (z.B. CGA Modus) um und nutzt die BIOS VGA Funktionen.

Im .NET Framework sind auch Console Funktionen enthalten, vielleicht können die Methoden Farben ausgeben.

Das ganze ist also erst mal nicht so simpel.

MfG

Arnd
 
ein ganz netter toolkit für textinteraface auf der console: turbo vision http://tvision.sourceforge.net/. die älteren werden sich noch erinnern, das das ding von borland. (das hübsche blau-gelbe...) wobei das für ein simples auswahlmenü vielleicht ein bisschen heftig ist, aber guck es dir mal an.
ein paar hübsche bilder hat es hier http://www.sigala.it/sergio/tvision/images.html
 
Zuletzt bearbeitet:
mit den "ding" von Borland probrammier ich heute noch
leider hilft mir das alles irgendwie nicht weiter...

nur so ne kleine auswahlliste mithilfe von pfeiltasten hinundher navigieren und mit enter halt die eingabe sozusagen.. muss doch irgendwie möglich sein

Rahmen und farben sind nicht schwert [ALT]+ Nummer fertig das alles noch schön in ner funktion und geht schon..
doch wie mach ich diese abfrage mit den pfeiltasten !!!
 
Als PseudoCode:

Code:
  DrawCompleteMenu();
  while( !bEnde )
  {
    if( isKeyPressed() )
    {
       lKeyCode = getCurrentPressedKey();

      switch( lKeyCode )
      {
         case ASCII_CODE_for_CursorDown:
           moveActivePosDown();
           refreshDisplay();
         break;
         case ASCII_CODE_for_CursorUp:
           moveActivePosUp();
           refreshDisplay();
         break;
      }
    }
  }

D.h. Du musst feststellen können ob eine Taste gedrückt ist, dann welche gedrückt ist und die Routinen zur Ausgabe auf dem Bildschirm plus ein bisschen Logik welcher Menüpunkt gerade aktiv ist und invertiert oder farbig dargestellt wird. Fertig.

Das geht natürlich davon aus das alles auch selber gezeichnet wurde und keine irgendwie geartete Tooluntertützung genutzt wurde. Dann siehe Handbuch des Tools.

MfG

Arnd
 
Zuletzt bearbeitet:
darkkiller1 schrieb:
mit den "ding" von Borland probrammier ich heute noch leider hilft mir das alles irgendwie nicht weiter...
hast du das selbe problem wie J!0X oder ist das ein doppel-account? mehr als die hilfe kann ich empfehlen bzw. das handbuch, das borland einst mitgeliefert hat. das sollte eigentlich auf einem flohmarkt noch zu bekommen sein. meine erfahrung mit tv liegen etwa 8 jahre zurück und waren in pascal. also so schwach regt sich da was im hirn, aber mehr auch nicht... mit "ding" wollte ich tv nicht abwerten, das ist eine netter toolkit. nur an machen stellen, merkt man ihm heute sein altern an. tv war zu seiner hochzeit ein wirklich guter toolkit ist nur leider über 10 jahre her.

EDIT @darkkiller sorry las den anderen thread erst jetzt. welches os hast du vor dir?
 
Zuletzt bearbeitet:
Arnd schrieb:
Code:
switch( lKeyCode ) 
  { 
        case ASCII_CODE_for_CursorDown: 
              moveActivePosDown(); 
              refreshDisplay(); 
              break; 
        case ASCII_CODE_for_CursorUp: 
              moveActivePosUp(); 
              refreshDisplay(); 
              break; 
  }
wenn ich jetzt nicht völlig falsch liegen, hat es keine ascii-nummer für eine cursordown. das muss man über die scancodes machen.
also zumindest unter unixes werden die cursor bewegungen als escape-sequenzen übertragen.
müsste mit der dose so ähnlich seine. also interrupt tabelle rausholen, den keyboardinterrupt überschreiben und bei den richtigen scancodes cursor-hoch und cursor-runter generieren. (ich liebe dos...)

EDIT2 da hat mir eine fehlerkorrektur den ganzen quellcode von anrd zerschossen. @arnd ich hoffe du kannst mit der setzung noch leben.
 
Zuletzt bearbeitet:
Es kann schon sein das das als Escape Sequenz kommt. D.h. dann aber nur das man diese eben analysieren muss. Sprich wenn das erste Zeichen ein ESC ist, wird eben der folgende Input gecheckt.

Das funktioniert unter Unix sehr gut und unter Dos auch aber etwas zickiger, zumindest sagt mir das meine Erinnerung. Wenn man sich damit beschäftigt wird man das ganz schnell merken :-).

Z.B. Cursor up als Zeichenfolge 27 14
und Cursor down als 27 15

Die konkreten Zahlen sind jetzt aber nur geraten.

D.h. es sollte auch ohne Interruptroutinen gehen.

Ich habe mit Absicht als Überschrift Pseudocode geschrieben.
Das war nur als Denkanstoss gedacht.

MfG

Arnd
 
Zuletzt bearbeitet:
ich hätte jetzt spontan den interrupt überschrieben und die scancodes verarbeitet. geht unter dos ja schnell.

ansonsten hast du micht neugierig gemacht, wie das eigentlich mit dos ging und da bin ich auf ein für die beiden herren, die fragten, sehr praktisches dokument gestoßen:
http://www.computerhope.com/ansisys.htm
beschreibt die ansi.sys und auch alle in der definierten escape-sequenzen und scancode-auf-ascii-werte also sowohl die für farben als auch die für die cursortasten.
bsp: UP ARROW 224;72 (wieso zu hölle ist das keine esc-sequenz?)
 
ansi.sys?

Igitt igitt, damit habe ich früher regelmässig Probleme gehabt.
Das war das erste was aus der Config.sys rausflog.
Vielleicht ist das heute ja besser.

Bzgl. Esc Sequenz Zitat:

"An ANSI escape sequence is a sequence of ASCII characters, the first two of which are the escape character (1Bh) and the left-bracket character (5Bh). The character or characters following the escape and left-bracket characters specify an alphanumeric code that controls a keyboard or display function"

D.h. es ist eine Escape Sequenz.

D.h. um Farben anzuzeigen ist das ein möglicher Weg. Um aber die Cursor Tasten abzufragen, würde ich doch einfach mal schauen was für Codes denn ohne Treiber kommen.

MfG

Arnd
 
Hi,

Also zu der Textfarbe in DOS bzw. Console:

Code:
#include <conio.h>
void textcolor(int newcolor);

BLACK schwarz 0
BLUE blau 1
GREEN grün 2
CYAN türkis 3
RED rot 4
MAGENTA violett 5
BROWN braun 6
LIGHTGRAY hellgrau 7
DARKGRAY dunkelgrau 8
LIGHTBLUE hellblau 9
LIGHTGREEN hellgrün 10
LIGHTCYAN helltürkis 11
LIGHTRED hellrot 12
LIGHTMAGENTA hellviolett 13
YELLOW gelb 14
WHITE weiß 15
BLINK blinkend 128

Hintergrund geht natürlich auch:

Code:
#include <conio.h>
void textbackground(int newcolor);

BLACK schwarz 0
BLUE blau 1
GREEN grün 2
CYAN türkis 3
RED rot 4
MAGENTA violett 5
BROWN braun 6
LIGHTGRAY hellgrau 7

EDIT:

Funktioniert aber nur mit Funktionen mit direkter Bildschirmausgabe wie zB.: cprintf.
 
Zuletzt bearbeitet:
Zurück
Oben