[C++] Cout Zeile mit Farbe -> KURZ!

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hallo.

Es gibt keinen "Standard"-C++-Befehl um die Farbe umzustellen. Entweder man verwendet zusätzliche Libraries (wie z.B. "ncurses"), die man nachträglich installieren muss, oder man greift direkt auf die Befehle des Betriebssystems zu, wodurch der Code dann allerdings nur für ein bestimmtes Betriebssystem compiliert werden kann. Da du mit Code::Blocks arbeitest, gehe ich davon aus, dass du Windows benutzt.

Unter Windows wird die Funktion "SetConsoleTextAttribute" dazu benutzt, die Farbe in der Konsole umzustellen (der erste Google-Treffer zu "SetConsoleTextAttribute" sollte die Beschreibung auf der Microsoft-Webseite sein).

Das Ganze funktioniert so:

#include <windows.h>
...
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
...
cout << flush;
SetConsoleTextAttribute(hConsole, FOREGROUND_RED);
...
cout << flush;
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
...
cout << flush;
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_RED);
...

Das "cout << flush;" sorgt dafür, dass vorherige "cout"-Operationen abgeschlossen werden, bevor der nächste Befehl (nämlich das Umschalten der Farbe) ausgeführt wird. Ansonsten kann es sein, dass die Farbe umgeschaltet wird, bevor das vorherige "cout" abgeschlossen worden ist und der Text vom vorherigen "cout" bereits teilweise in der neuen Farbe dargestellt wird.

Das zweite Argument ist eine bitweise ODER-Verknüpfung aus diversen Konstanten. Soll der Text z.B. weiß sein, so müsste man die Konstanten Rot, Grün, Blau und Intensity miteinander kombinieren; für dunkelgelb hingegen nur Rot und Grün...

Auf der Microsoft-Webseite zu SetConsoleTextAttribute findest du einen Link auf eine andere Seite (ebenfalls bei Microsoft) wo sämtliche Konstanten aufgelistet sind.

LeonSchwass 
Fragesteller
 27.12.2014, 17:29

Danke für die Hilfreiche Antwort :) jetzt gib es leider 1 Problem. Wenn ich windows.h inkludiere markiert er mir in Zeile 18 und 19 am Ende die ::min und ::max Funktion. Kann man das irgendwie beheben oder muss ich auf diese Funktionen verzichten? LG

0
LeonSchwass 
Fragesteller
 27.12.2014, 17:47

Und es wäre nett wie du mir sagen könntest wie ich nur eine Zeile Farbig mache. Jedoch habe ich festgestellt dass ich nur RGB benutzen kann. Kann man das auch irgendwie mit Weiß, Gelb usw. machen?

0
ich hatte sowas ähnliches schonmal gefunden

wahrscheinlich meinst Du die ANSI Escape Sequenzen ("\x1b[31m"): https://en.wikipedia.org/wiki/ANSI_escape_code

Ich benutze diese sehr gern; nur Windows-User müssen seit XP darauf verzichten (zumindest weiss ich nicht, ob und wie der ansi-Treiber nach NT4 installiert werden kann).

Wahrscheinlich ist die von Martin vorgeschlagene Funktion SetConsoleTextAttribute() die einzige Möglichkeit, etwas Farbe in eine neuere Windows-Konsole zu bekommen.

ich kann leider dein bild nicht aufrufen, aber ich nehme du meinst mal du magst dein code bunt haben?, sollte eh eig jede konsole automatisch machen? versuchs mal mit visual studio, wie schon der name visual sagt kannst du auch da schon dein windows form fenster anpassen und alle, ich find den compiler recht gut und auch einfach zu bedienen schau es dir mal an, wenn du lehrling student oder schüler bist kriegst du den sogar gratis, also die professional version kriegst du dann gratis bei https://www.dreamspark.com/ musst dich nur mit dein schüler ausweis verifizieren :)

mfg BPMHunter

LeonSchwass 
Fragesteller
 27.12.2014, 02:08

Bild wurde jetzt hochgeladen :) wollte beim ersten Mal wohl nicht :)

Und ich benutze bereits Visual Studio :)

0
BPMHunter  27.12.2014, 02:10
@LeonSchwass

ich schau gleich nach ob das bei mir auch so ist momment, aber ich glaub ansich das cout bleibt weiss

mfg BPMHunter PS: dein kommentar hehe :')

0
LeonSchwass 
Fragesteller
 27.12.2014, 02:15
@BPMHunter

Achso, du hast mich falsch verstanden sry. Ich meine in der fertigen Konsole :)

0
BPMHunter  27.12.2014, 02:17
@BPMHunter

fazit: cout bleibt bei mir auch weiss, vielleicht weil ich grad eine fehlermeldung hab, da ich grad vergessen habe wie die ausgabe nochmal ging, hab sogar gegooglet will aber nicht, aber wenn ich mich richtig erinnere, bleibt cout immer weiss, die ausgabe wird dann bunt :)

mfg BPMHunter

0
BPMHunter  27.12.2014, 02:18
@LeonSchwass

achso, naja, ich weiss nicht ob das geht, wurde mir nie erklärt, ich meine normal beim cmd geht es ja wenn man color und dann den code eingibt für die farbe, so irgendwie, ist schon alles länger her :P

mfg BPMHunter

0
LeonSchwass 
Fragesteller
 27.12.2014, 02:20
@BPMHunter

Ja das mit dem Color und dem Code liegt mir auch noch irgendwie im Kopf, weiß aber nichtmehr wie :P

0
BPMHunter  27.12.2014, 02:22
@LeonSchwass

ah habs, musst color eingeben dann sollte irgendwie irgendwann mal dir die codes angegeben werden, dann zeigt er dir welche zahl welche farbe ist, die erste zahl/buchstabe ist für den hintergrung und die zweite für die schrift :)

mfg BPMHunter

0
BPMHunter  27.12.2014, 02:25
@LeonSchwass

haha, also ich wollte noch nie das die schrift in einer anderen farbe ausgegeben wird, aber zuweisen solltest du das können wenn du die exe die raus kommt über cmd aufrufst, eventuell sollte es einen code dafür geben

mfg BPMHunter

0
LeonSchwass 
Fragesteller
 27.12.2014, 02:27
@BPMHunter

okay ich werde mal ein bisschen rumprobieren :) Frohe Weihnachten und eine gute Nacht wünsche ich dir noch :)

0
BPMHunter  27.12.2014, 02:29
@LeonSchwass

ja eventuell kann ich morgen nachschauen, heute ist schon feierabend, egal um was es geht :P danke dir auch im nachhinein, gute nacht

mfg BPMHunter

0

Hier das Bild nochmal, hat glaube ich bei ersten Mal nicht funktioniert!

Sry hat nicht funktioniert :( - (programmieren, Farbe, Konsolen)