Farbiger Text in Konsole !
-
Hi ,
ich habe einige Funktionen geschrieben in denen ich nach Bedarf Texte auf der Konsole ausgebe.
Ich habe das mit printf() realisiert.Meine Frage ist nun, kann ich einzelne oder mehrere Zeichen die ich mit print f ausgebe oder ausgegeben haben noch einfärben.
Gibt es eine Funktion AnStelle (x,y, GREEN); oder so.ich kenne "SetConsoleTextAttribute" aber wenn ich nun z.B. mit
printf("*************"); ausgebe dann müße ich doch um verschiedenfarbige Sterne zu haben printf("");Farbe(GREEN);printf("");Farbe(YELLOW);printf("");Farbe(MANGENT); schreiben.
Das wollte ich vermeinden !
-
Questioneer schrieb:
Gibt es eine Funktion AnStelle (x,y, GREEN); oder so.
Ja, mach ein Makro oder eine Inline-Funktion daraus. Das ist doch gar nicht schwer.
Questioneer schrieb:
ich kenne "SetConsoleTextAttribute" aber wenn ich nun z.B. mit
printf("*************"); ausgebe dann müße ich doch um verschiedenfarbige Sterne zu haben printf("");Farbe(GREEN);printf("");Farbe(YELLOW);printf("");Farbe(MANGENT); schreiben.
Das wollte ich vermeinden !Vielleicht könntest Du uns verraten, wie Du Dir das vorgestellt hast, diese Sterne verschiedenfarbig auszugeben?
Martin
-
Hi,
ja die Sterne sollen verschiedenfarbig sein einer rot, dann grün, dann blau, gelb .......!
Gruß
Questioneer
-
Ich meinte wie würde Deine printf() Anweisung aussehen?
Wie hättest Du diese gerne?
-
Hi,
ich wollte mit printf("************************"); die Sterne ausgeben und diese
später in ihrer Farbe ändern. D.H. die printf() wollte ich nicht ändern !Gruß
Qustioneer
-
Ich habe mir für diesen Zweck eine Funktion geschrieben. Damit kann man allerdings, wie der Name der Funktion schon sagt, nur Text ausgeben. Das integrieren von Variablen wie bei printf geht nicht.
void TextOutput(const char *Text) { //^[(TEXT)(BACKGROUND)] ; ^[(RGBI)(RGBI)] / ^[(rgbi)(rgbi)] //0 --> not selected r/g/b/i --> selected //Ex.: TextOutput("^[(rg00)(0000)]Hello World!"); CONSOLE_SCREEN_BUFFER_INFO CSBI; WORD OC,NC; unsigned long WP=0; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CSBI); OC=CSBI.wAttributes; while(Text[WP]!='\0') { if(Text[WP]=='^') { NC=0; WP+=2; if(Text[++WP]=='R'||Text[WP]=='r') NC|=FOREGROUND_RED; if(Text[++WP]=='G'||Text[WP]=='g') NC|=FOREGROUND_GREEN; if(Text[++WP]=='B'||Text[WP]=='b') NC|=FOREGROUND_BLUE; if(Text[++WP]=='I'||Text[WP]=='i') NC|=FOREGROUND_INTENSITY; WP+=2; if(Text[++WP]=='R'||Text[WP]=='r') NC|=BACKGROUND_RED; if(Text[++WP]=='G'||Text[WP]=='g') NC|=BACKGROUND_GREEN; if(Text[++WP]=='B'||Text[WP]=='b') NC|=BACKGROUND_BLUE; if(Text[++WP]=='I'||Text[WP]=='i') NC|=BACKGROUND_INTENSITY; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),NC); WP+=3; } else { putc(Text[WP++],stdout); } } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),OC); }
-
am einfachsten ist es, WriteConsoleOutput zu benutzen. Es wird unter anderem ein
const CHAR_INFO *lpBuffer
übergeben, in dem die farbinformationen gespeichert sind. man kann jedem einzelnen buchstaben im voraus eine farbe verpassen. diese farbinformationen bleiben erhalten, auch wenn die ausgabe an einer anderen bildschirmpostion stattfindet.
-
Danke RealC++,
super jetzt funktioniert das und durch Deinen Code hab ich einiges über die Console gelernt !
@einfach0r
Danke das ist der einfachste Weg !Vielen Dank an euch beide,
Questioneer
-
Wenn du doch Variablen ausgeben möchtest mit der Funktion von RealC++ dann schau dir einfach mal folgende Standard Library Funktion an: int snprintf(char *dest, size_t destsize, const char *format, ...)
Mom, ich schreib dir schnell ein Bsp dazu:
const int out = 15; // Auszugebende Zahl char *buffer = new char[128]; snprintf(buffer, 128, "^[(rg00)(0000)]Die Variable in Farbe: %d", out); // Jetzt die Funktion von RealC++ TextOutput(buffer);
Nur für den Fall
-
Hallo,
auch ich versuche ein einzelnes Zeichen an der Konsole einzufärben.
Als Programmierumgebung benutze ich Dev C++ (in Version 4).
Leider bekomme ich immer die Fehlermeldung 'implicit declaration of funcion snprintf...'.Selbst das Beispiel von dieser Seite: http://de.wikibooks.org/wiki/C-Programmierung:_stdio.h#int_snprintf.28char_.2Adest.2C_size_t_destsize.2C_const_char_.2Aformat.2C_....29
gibt mir den gleichen Fehler aus.Was muss ich machen, damit snprintf auch erkannt wird?
Danke
Dickus