Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ C / C++ (ANSI-Standard) » Farben in C / C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.07.2003, 02:35 Uhr
Pablo
Supertux
(Operator)


Wie ich mir schon gedacht hab, VC++ erkennt das nicht. Naja, ich hab viel zu viel von VC++ erwartet, aber gcc von Cygwin erzeugt eine exe Datei, die auch unter DOS richtige Farben enthählt.


-------------------------------------------------------------------------------------------------------------------

Das hab ich auch erwartet: TurboC kann auch nicht das erkennen! Also ich bleib lieber bei Linux!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 18.07.2003 um 22:11 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.07.2003, 12:33 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Natürlich erkennt VC++ das nicht, genausowenig wie alle anderen C/C++-Compiler. Die ANSI-Codes werden erst vom Bildschirmtreiber erkannt, der setzt sie dann um. Unter DOS konnte man z.B. beim Booten die ANSI.SYS laden, dann funktionierten dort auch die ganzen ANSI-Codes inklusive "cls" usw...

Ist also eine Sache des Betriebssystems, nicht des verwendeten Compilers. Unter Cygwin funktionierts, weil dort automatisch ein anderer Bildschirmtreiber verwendet wird. Unter Win NT/2000 kannst Du den Befehl

device=ansi.sys

in die Config.nt schreiben, unter Win 95/98/ME ist es die Config.sys. Dann funktioniert das auch unter Windows.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 21.07.2003 um 12:35 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.07.2003, 21:18 Uhr
Pablo
Supertux
(Operator)


Hab mich immer gefragt, wozu diese Zeile in config.sys. Ich habe immer um diese erweitert aber ich wusste nicht warum. Aha, jetzt weiß ich aber ich brauch das nicht mehr.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.10.2005, 22:53 Uhr
Bruder Leif
dances with systems
(Operator)


Ist zwar inzwischen ziemlich out of date, aber...


Zitat von Pablo:


Code:
printf("\033[0;42m\033[1;34mDer Text ist blau aber der Hintrgrund grün\033[0m\n");





Du gehörst geschlagen, weißt Du das?
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.10.2005, 23:26 Uhr
Pablo
Supertux
(Operator)


nein, weiß ich nicht. Aber cool, dass es dir nach soooo langer Zeit aufgefallen ist
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.10.2005 um 23:26 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: