web-dev-qa-db-fra.com

Comment changer la couleur du texte et la couleur de la console dans code :: blocks?

J'écris un programme en C. Je veux changer la couleur du texte et la couleur de fond de la console. Mon exemple de programme est - 

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>

int main(int argc,char *argv[])
{
 textcolor(25);
 printf("\n \n \t This is dummy program for text color ");
 getch();

 return 0;
}

Quand je compile ce programme, code :: blocks me donne une erreur - textcolor non défini. Pourquoi cela est-il ainsi? Je travaille dans un compilateur GNU GCC et Windows Vista. Si cela ne fonctionne pas, quelle est la copie de textcolor? Comme ça, je veux changer la couleur de fond de la console. Le compilateur me donne la même erreur mais le nom de la fonction est différent. Comment changer la couleur de la console et du texte. S'il vous plaît aider.

Je vais bien même si la réponse est en C++.

8
Ashish Ahuja

Des fonctions telles que textcolor travaillaient dans d'anciens compilateurs tels que turbo C et Dev C . Dans les compilateurs actuels, ces fonctions ne fonctionneraient pas. Je vais donner deux fonctions SetColor et ChangeConsoleToColors . Vous copiez-collez ces fonctions dans votre programme et procédez comme suit. Le code que je vous donne ne fonctionnera pas dans certains compilateurs.

Le code de SetColor est - 

 void SetColor(int ForgC)
 {
     Word wColor;

      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
      CONSOLE_SCREEN_BUFFER_INFO csbi;

                       //We use csbi for the wAttributes Word.
     if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
     {
                 //Mask out all but the background attribute, and add in the forgournd     color
          wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
          SetConsoleTextAttribute(hStdOut, wColor);
     }
     return;
 }

Pour utiliser cette fonction, vous devez l’appeler depuis votre programme. Par exemple, je prends votre exemple de programme - 

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <dos.h>
#include <dir.h>

int main(void)
{
  SetColor(4);
  printf("\n \n \t This text is written in Red Color \n ");
  getch();
  return 0;
}

void SetColor(int ForgC)
 {
 Word wColor;

  HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  CONSOLE_SCREEN_BUFFER_INFO csbi;

                       //We use csbi for the wAttributes Word.
 if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
 {
                 //Mask out all but the background attribute, and add in the forgournd color
      wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
      SetConsoleTextAttribute(hStdOut, wColor);
 }
 return;
}

Lorsque vous exécutez le programme, vous obtenez la couleur du texte en ROUGE. Maintenant je vais vous donner le code de chaque couleur - 

Name         | Value
             |
Black        |   0
Blue         |   1
Green        |   2
Cyan         |   3
Red          |   4
Magenta      |   5
Brown        |   6
Light Gray   |   7
Dark Gray    |   8
Light Blue   |   9
Light Green  |   10
Light Cyan   |   11
Light Red    |   12
Light Magenta|   13
Yellow       |   14
White        |   15

Maintenant, je vais donner le code de ChangeConsoleToColors . Le code est - 

void ClearConsoleToColors(int ForgC, int BackC)
 {
 Word wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
               //Get the handle to the current output buffer...
 HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
                     //This is used to reset the carat/cursor to the top left.
 COORD coord = {0, 0};
                  //A return value... indicating how many chars were written
                    //   not used but we need to capture this since it will be
                      //   written anyway (passing NULL causes an access violation).
  DWORD count;

                               //This is a structure containing all of the console info
                      // it is used here to find the size of the console.
 CONSOLE_SCREEN_BUFFER_INFO csbi;
                 //Here we will set the current color
 SetConsoleTextAttribute(hStdOut, wColor);
 if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
 {
                          //This fills the buffer with a given character (in this case 32=space).
      FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

      FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
                          //This will set our cursor position for the next print statement.
      SetConsoleCursorPosition(hStdOut, coord);
 }
 return;
}

Dans cette fonction, vous passez deux nombres. Si vous voulez des couleurs normales, il suffit de mettre le premier chiffre comme zéro et le second comme couleur. Mon exemple est - 

#include <windows.h>          //header file for windows
#include <stdio.h>

void ClearConsoleToColors(int ForgC, int BackC);

int main()
{
ClearConsoleToColors(0,15);
Sleep(1000);
return 0;
}
void ClearConsoleToColors(int ForgC, int BackC)
{
 Word wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
               //Get the handle to the current output buffer...
 HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
                     //This is used to reset the carat/cursor to the top left.
 COORD coord = {0, 0};
                  //A return value... indicating how many chars were written
                    //   not used but we need to capture this since it will be
                      //   written anyway (passing NULL causes an access violation).
 DWORD count;

                               //This is a structure containing all of the console info
                      // it is used here to find the size of the console.
 CONSOLE_SCREEN_BUFFER_INFO csbi;
                 //Here we will set the current color
 SetConsoleTextAttribute(hStdOut, wColor);
 if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
 {
                          //This fills the buffer with a given character (in this case 32=space).
      FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

      FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count );
                          //This will set our cursor position for the next print statement.
      SetConsoleCursorPosition(hStdOut, coord);
 }
 return;
} 

Dans ce cas, j'ai mis le premier nombre à zéro et le second nombre à 15 pour que la couleur de la console soit blanche car le code pour le blanc est 15. Cela fonctionne pour moi dans code :: blocks. J'espère que ça marchera pour toi aussi.

8
Ashish Ahuja

Vous pouvez également utiliser rlutil :

  • plate-forme transversale,
  • en-tête seulement (rlutil.h),
  • fonctionne pour C et C++,
  • implémente setColor(), cls(), getch(), gotoxy(), etc.
  • Licence: WTFPL

Votre code deviendrait quelque chose comme ceci:

#include <stdio.h>

#include "rlutil.h"

int main(int argc, char* argv[])
{
    setColor(BLUE);
    printf("\n \n \t This is dummy program for text color ");
    getch();

    return 0;
}

Jetez un coup d'oeil à example.c et test.cpp pour les exemples C et C++.

7
maddouri

La fonction textcolor n'est plus prise en charge par les derniers compilateurs. 

C'est le moyen le plus simple de changer la couleur du texte dans les blocs de code . Vous pouvez utiliser la fonction system.

Pour changer la couleur du texte:

#include<stdio.h> 
#include<stdlib.h> //as system function is in the standard library

int main()        
        {
          system("color 1"); //here 1 represents the text color
          printf("This is dummy program for text color");
          return 0;
        }

Si vous voulez changer la couleur du texte et la couleur de la console, il vous suffit d'ajouter un autre code de couleur dans la fonction system

Pour changer la couleur du texte et la couleur de la console:

system("color 41"); //here 4 represents the console color and 1 represents the text color

N.B: N'utilisez pas d'espaces entre les codes de couleur comme ceux-ci 

system("color 4 1");

Cependant, si vous le faites, Code Block affichera tous les codes de couleur. Vous pouvez utiliser cette astuce pour connaître tous les codes de couleur pris en charge.

1
Md. Pial Ahamed

C’est une fonction en ligne, j’ai créé un fichier d’entête avec elle, et j’utilise plutôt Setcolor();; Vous pouvez changer la couleur en choisissant n’importe quelle couleur dans la plage 0-256. :) Malheureusement, je crois que CodeBlocks a une version plus récente de la bibliothèque window.h ...

#include <windows.h>            //This is the header file for windows.
#include <stdio.h>              //C standard library header file

void SetColor(int ForgC);

int main()
{
    printf("Test color");       //Here the text color is white
    SetColor(30);               //Function call to change the text color
    printf("Test color");       //Now the text color is green
    return 0;
}

void SetColor(int ForgC)
{
     Word wColor;
     //This handle is needed to get the current background attribute

     HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
     CONSOLE_SCREEN_BUFFER_INFO csbi;
     //csbi is used for wAttributes Word

     if(GetConsoleScreenBufferInfo(hStdOut, &csbi))
     {
          //To mask out all but the background attribute, and to add the color
          wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
          SetConsoleTextAttribute(hStdOut, wColor);
     }
     return;
}
1
LearningCODE

Une approche facile ...

system("Color F0");

Lettre représente la couleur de fond tandis que le nombre représente la couleur du texte.

0 = noir

1 = bleu

2 = vert

3 = aqua

4 = rouge

5 = violet

6 = jaune

7 = blanc

8 = gris

9 = bleu clair

A = vert clair

B = Aqua clair

C = rouge clair

D = violet clair

E = jaune clair

F = blanc brillant

0
user7504718

system("COLOR 0A"); '

où 0A est une combinaison de couleur de fond et de police 0

0
Akash Rc