000
18.07.2003, 02:19 Uhr
Pablo
Supertux (Operator)
|
Wie wir es schon wissen, C und C++ kennen keine Farben (für Console). In Sprachen wie BASIC, PASCAL, usw. gibt es einen Befehl, mit dem man die Farbe des Textes ändern kann. Dies gibt es jedoch in C/C++ nicht und viele haben sich schon gefragt, wie das überhaupt geht.
Das ist eine reine ANSI Angelegenheit, das wird eigentlich nicht von C/C++ gemacht, sondern von der Sehll, die unsere Programme ausführt. Dies ist der Fall von Linux (ich weiß es nicht, ob es unter Windows auch funktioniert, sollte wegen ANSI funktionieren, ob VC++ das erkennen kann, weiß ich nicht).
Die Shell erkennt in den Strings die Escape Characters, die ähnlich wie die C/C++ Escape Characters sind. Wenn man folgendes eingibt:
Code: |
$ echo -e "Die erste Zeile\nDie zweite Zeile\nDie dritte Zeile"
|
erhält man:
Code: |
$ echo -e "Die erste Zeile\nDie zweite Zeile\nDie dritte Zeile" Die erste Zeile Die zweite Zeile Die dritte Zeile $
|
-e sagt, dass die \ Notation verstanden werden muss.
Somit kann man auch Farben und Textformate erzeugen.
\033 steht für Farbe im folgenden Format:
Code: |
\033[x;ym mit x = {0, 1, 4, 5} und y = {30, ..., 37, 40, ... , 47} und m muss immer am Schluss stehen.
|
Die Codierung für x und y ist wie folgt:
Zitat: |
Linux Manual Page - tcsh-
If your terminal does use ISO 6429 color codes, you can compose the type codes (i.e., all except the lc, rc, and ec codes) from numerical commands separated by semicolons. The most common commands are:
0 to restore default color 1 for brighter colors 4 for underlined text 5 for flashing text 30 for black foreground 31 for red foreground 32 for green foreground 33 for yellow (or brown) foreground 34 for blue foreground 35 for purple foreground 36 for cyan foreground 37 for white (or gray) foreground 40 for black background 41 for red background 42 for green background 43 for yellow (or brown) background 44 for blue background 45 for purple background 46 for cyan background 47 for white (or gray) background
Not all commands will work on all systems or display devices.
|
Wenn x=5, dann funktioniert nicht überall. Wenn man sich im X-Server befindet und eine Shell wie xterm, aterm, Eterm, usw. ausführt und diese Sequenz benutzt, hat man leider keinen blinkenden Text. Wenn man aber außerhalb vom X-Server ausprobiert oder in der Shell - Konsole von KDE dann geht es.
Folgender Code spielt mit diesen Farben, es ist C Code und es sollte keine Probleme geben beim Kompilieren.
C++: |
#include <stdio.h> int main() { int i; printf("\033[0;31mDieser Text ist ein roter Text und ab hier\033[0m normal\n"); printf("\033[1;31mDieser ist ebenfalls ein roter Text\n"); printf("Und dieser hier auch, \033[0m aber dieser nicht mehr\n"); for(i=1; i<15; i++) printf("\033[%c;3%dmFarbe:%c;3%d\033[0m%s",(i>7 ? '1':'0'), (i % 7) == 0 ? 7 : i % 7, (i>7 ? '1':'0'), (i%7) == 0 ? 7 : i%7, i%7 ? ", " : "\n" ); printf("Für schwarze Farbe: 30\n"); printf("\033[0;42m\033[1;34mDer Text ist blau aber der Hintrgrund grün\033[0m\n"); printf("\033[4;31mUnd der da ist rot und unterstriechen\033[0m\n"); }
|
Welche ist die Ausgabe? Oder besser gesagt, wie sieht die Ausgabe aus? -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! Dieser Post wurde am 24.01.2005 um 17:33 Uhr von Pablo editiert. |