hintergrundfarbe
-
hallo zusammen =))
ich möchte eine Hintergrundfarbe in der Konsole haben und frage mich jetzt wie das geht
vllt hat ja einer eine ideemomentan bin ich soweit...
#include "BMP.h" #include <stdlib.h> #include <stdio.h> void background(Bmp* this,Color c){ } int main (){ printf(background(0,255,0)); return 0; }
vllt hat jemand spontan eine idee???
Danke
-
Mit reinem ANSI-C geht das nicht. Suche mal nach der "Improved Console", vielleicht hilft das weiter.
Übrigens lässt sich dein Code wohl kaum kompilieren. background nimmt 2 Parameter, nicht 3...
-
Hallo,
probier mal ob funzt:#include <windows.h> int main() { system("COLOR F0"); puts("WooooW!"); getchar(); return 0; }
Wenn nicht, frag im Linuxforum.
Gruß,
B.B.
-
derPate schrieb:
hallo zusammen =))
ich möchte eine Hintergrundfarbe in der Konsole haben und frage mich jetzt wie das geht
vllt hat ja einer eine ideemomentan bin ich soweit...
#include "BMP.h" #include <stdlib.h> #include <stdio.h> void background(Bmp* this,Color c){ } int main (){ printf(background(0,255,0)); return 0; }
vllt hat jemand spontan eine idee???
Danke
Hi,
falls das unter Windows laufen soll. Ich hab mir da ein colour_fprintf geschrieben:#ifndef __CONSOLE__ #define __CONSOLE__ #include <windows.h> #include <stdio.h> #define COLOUR_START '#' #define COLOUR_BACK '*' #define COLOUR_FRONT '#' #ifndef BOOL #define BOOL int #define TRUE 1 #define FALSE 0 #endif typedef enum {BACKGROUND, FOREGROUND, NONE}COLOUR_MODE; int colour_fprintf(FILE* fStream,const char* szFormat, ...); #endif
#include "Console.h" #include <windows.h> #include <stdio.h> #include <stdarg.h> #include <string.h> WORD GetColourByRBG(BOOL bRed, BOOL bBlue, BOOL bGreen, COLOUR_MODE Mode) { WORD Tmp = 0; if(bRed) Tmp |= ((Mode == BACKGROUND) ? BACKGROUND_RED : FOREGROUND_RED); if(bBlue) Tmp |= ((Mode == BACKGROUND) ? BACKGROUND_BLUE : FOREGROUND_BLUE); if(bGreen) Tmp |= ((Mode == BACKGROUND) ? BACKGROUND_GREEN : FOREGROUND_GREEN); Tmp |= ((Mode == BACKGROUND) ? BACKGROUND_INTENSITY : FOREGROUND_INTENSITY); return Tmp; } WORD GetColour(char cColour, COLOUR_MODE Mode) { if( isdigit(cColour) ) { cColour -= 0x30; return GetColourByRBG(cColour & 0x1, cColour & 0x2, cColour & 0x4, Mode); } switch(cColour) { case 'B': case 'b': return GetColourByRBG(0,1,0, Mode); case 'G': case 'g': return GetColourByRBG(0,0,1, Mode); case 'R': case 'r': return GetColourByRBG(1,0,0, Mode); case 'Y': case 'y': return GetColourByRBG(1,0,1, Mode); case 'w': case 'W': default: return GetColourByRBG(1,1,1, Mode); } } HANDLE GetStreamHandle(FILE* fStream) { if(fStream == stdout) return GetStdHandle(STD_OUTPUT_HANDLE); else if(fStream == stderr) return GetStdHandle(STD_ERROR_HANDLE); return NULL; } int colour_fprintf(FILE* fStream,const char* szFormat, ...) { BOOL bStdStream; BOOL bSwitchNext = FALSE; BOOL bLastChar = FALSE; BOOL bPrint = FALSE; BOOL bCheckChar = FALSE; HANDLE hTmp = NULL; size_t sStreamLen = strlen(szFormat); size_t sCur = 0; size_t sCurBuffer = 0; char* pTmp = (char*)szFormat; char* pBuffer = malloc( (sStreamLen+1) * sizeof(char)); COLOUR_MODE Mode; int iPrinted = 0; int cValues = 0; char cColour; va_list VaList; int* pTmpArgs; va_start(VaList, szFormat); if( !pBuffer ) return 0; while( *pTmp ) { if( *(pTmp+1) == '\0') bLastChar = TRUE; if(bCheckChar) { if(isalpha( *pTmp )) { bCheckChar = FALSE; if( *pTmp == 'f' || *pTmp == 'e' || *pTmp == 'E') cValues += 2; else if( *pTmp == 'l' || *pTmp == 'L') bCheckChar = TRUE; else cValues++; } } /*check if its an colour to set*/ if( *pTmp == COLOUR_START) { if( !bLastChar ) { if( (sCur + 2) < sStreamLen) { switch( *(pTmp+1) ) { case COLOUR_BACK: Mode = BACKGROUND; break; case COLOUR_FRONT: Mode = FOREGROUND; break; default: Mode = NONE; } if(Mode != NONE) { hTmp = GetStreamHandle(fStream); cColour = *(pTmp+2); bPrint = TRUE; pTmp += 3; } } } } /*check if its an arg*/ else if( *pTmp == '%' ) { if(bSwitchNext == FALSE) { if( (sCur + 1 ) < sStreamLen) { if( *(pTmp+1) == '%') bSwitchNext = TRUE; else bCheckChar = TRUE; } } else bSwitchNext = FALSE; } if( !bPrint) { *(pBuffer+sCurBuffer) = *(pTmp); sCur++; sCurBuffer++; pTmp++; } /*Print the chars in the buffer*/ if(bLastChar || bPrint) { pTmpArgs = malloc(cValues * sizeof(int)); if(pTmpArgs != NULL) { int iTmp = 0; int iTmpValue; *(pBuffer+sCurBuffer) = '\0'; for(;iTmp < cValues; iTmp++) *(pTmpArgs+iTmp) = va_arg(VaList, int); for(; iTmp > 0; iTmp--) { iTmpValue = *(pTmpArgs + iTmp -1); __asm { push iTmpValue; } } fprintf(fStream, pBuffer); __asm { add iPrinted, eax; mov eax, 4; imul eax, cValues; add esp, eax; } free(pTmpArgs); bPrint = FALSE; cValues = 0; sCurBuffer = 0; } if(hTmp != NULL) SetConsoleTextAttribute(hTmp, GetColour(cColour, Mode) ); } } va_end(VaList); free(pBuffer); return iPrinted; }
Funktionsweise:
einfach colour_fprintf aufrufen und im String (wie vorher definiert) z.B. "#*r" schreiben und der background fuer den restlichen output wird Rot.
Blessed Weekend C0de4Fun
PS: bei mir getested mit vs2k8 prof ob das jetzt so portable(von 32 auf 64 sowieso erst mal ned da:
mov eax, 4; imul eax, cValues; add esp, eax;
) is kann ich nicht sagen hab mal nachgefragt aber noch keine Antwort bekommen.
-
Hi,
schon mal vielen Dank für die vielen und ausführlichen Antworten!
Ich soll das alles mit Linux programmieren.
ich habe mich vllt etwas unklar ausgedrückt
habe auch erst jetzt den Sinn der Aufgabe so richtig verstanden.
Aber das kommt mir iwie noch komplizierter vor.
Ich soll ein Programm in c schreiben welches ein neues Dokument öffnet (ieine Seite...) auf der dann der Hintergrund eine Hintergrundfarbe hat zum Beispiel rot gelb blau etc.Ich habe dafür zweit vorgegebene Bibliotheken.
Mein Problem beteht nun darin, dass ich ja in meinem Dokument ieine Befehl schreiben muss damit er auf den Richtigen Befehl in der Bibliothek zugreift.In meinem Fall ist das
void background(Bmp* this,Color c){ }
mein größtest Problem ist nun das ich nciht weiß was ich in die Klammern schreibe...welcher Befehl oder welche Befehlsart (wer kennt Bsp...?) muss ich verwenden?
schon mal vielen Dank
mfg
-
mein größtest Problem ist nun das ich nciht weiß was ich in die Klammern schreibe...welcher Befehl oder welche Befehlsart (wer kennt Bsp...?) muss ich verwenden?
Frag einfach die Unix-Leute.
-
Du bist ja lustig. Sollen wir dir jetzt jede kleine Information aus der Nase ziehen müssen? Wenn du zwei Bibliotheken hast, die dir vorgegeben wurden, dann solltest du uns vielleicht sagen, welche das sind, wenn du wirklich erwartest, dass man dir hilft.
=> http://www.tty1.net/smart-questions_de.html
Hast du mal nach den Bibliotheken gegoogelt. Vermutlich findet man da relativ schnell verwendbare Dokumentation.
Allgemein kann man das in Linux mit ANSI-Escapesequenzen oder zB mit den ncurses lösen...
-
tut mir leid
bin noch gaaaanz am Anfang in der c Programmierung ist noch alles neu für mich.
Es handelt sich um eine selbst geschriebene Bibliothek.#ifndef BMP__H_ #define BMP__H_ #include <stdlib.h> #include <stdio.h> typedef struct { unsigned char red; unsigned char green; unsigned char blue; } Color; const static Color BLACK = {0,0,0}; const static Color WHITE = {255,255,255}; const static Color RED = {255,0,0}; const static Color GREEN = {0,255,0}; const static Color BLUE = {0,0,255}; const static Color YELLOW= {255,255,0}; typedef struct { int width; int height; Color* imagedata ; } Bmp; Bmp* newBmp(int width,int height); void deleteBmp(Bmp* this); void writeBmpToFile(Bmp* this,char* fileName); void setBmpPoint(Bmp* b,Color c,int x, int y); #endif
hoffe ihr habt eine idee... Danke