it-swarm.com.ru

Как изменить цвет текста и цвет консоли в code :: blocks?

Я пишу программу на C. Я хочу изменить цвет текста и цвет фона в консоли. Мой пример программы - 

#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;
}

Когда я компилирую эту программу, code :: blocks выдает ошибку - textcolor не определен. Почему это так? Я работаю в GNU компиляторе GCC и Windows Vista. Если это не сработает, что является дубликатом textcolor. Вот так я хочу изменить цвет фона консоли. Компилятор выдает мне ту же ошибку, просто имя функции другое. Как изменить цвет консоли и текста. Пожалуйста помоги.

Я в порядке, даже если ответ на C++.

8
Ashish Ahuja

Такие функции, как textcolor, работали в старых компиляторах, таких как turbo C и Dev C . В современных компиляторах эти функции не будут работать. Я собираюсь дать две функции SetColor и ChangeConsoleToColors. Вы копируете и вставляете код этих функций в свою программу и делаете следующие шаги. Код, который я даю, не будет работать в некоторых компиляторах.

Код SetColor является - 

 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;
 }

Чтобы использовать эту функцию, вам нужно вызвать ее из вашей программы. Например, я беру вашу примерную программу - 

#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;
}

Когда вы запустите программу, вы получите цвет текста в красном цвете. Теперь я собираюсь дать вам код каждого цвета - 

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

Теперь я собираюсь дать код ChangeConsoleToColors. Код - 

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;
}

В этой функции вы передаете два числа. Если вы хотите нормальные цвета, просто поставьте первое число как ноль, а второе число как цвет. Мой пример - 

#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;
} 

В этом случае я поставил первое число как ноль, а второе число как 15, поэтому цвет консоли будет белым, а код для белого - 15. Это работает для меня в code :: blocks. Надеюсь, это работает и для вас.

8
Ashish Ahuja

Вы также можете использовать rlutil :

  • кроссплатформенный,
  • только заголовок (rlutil.h),
  • работает на C и C++,
  • реализует setColor(), cls(), getch(), gotoxy() и т. д.
  • Лицензия: WTFPL

Ваш код станет примерно таким:

#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;
}

Взгляните на example.c и test.cpp для примеров C и C++.

7
maddouri

Функция textcolor больше не поддерживается в последних компиляторах. 

Это самый простой способ изменить цвет текста в кодовых блоках . Вы можете использовать функцию system.

Чтобы изменить цвет текста:

#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;
        }

Если вы хотите изменить как цвет текста, так и цвет консоли, вам просто нужно добавить другой цветовой код в функцию system

Чтобы изменить цвет текста и цвет консоли:

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

Н.Б .: Не используйте пробелы между цветовыми кодами, как эти 

system("color 4 1");

Хотя, если вы сделаете это, Code Block покажет все цветовые коды. Вы можете использовать эти приемы, чтобы узнать все поддерживаемые цветовые коды.

1
Md. Pial Ahamed

Это функция онлайн, я создал с ней файл заголовка и вместо этого использую Setcolor();, надеюсь, это помогло! Вы можете изменить цвет, выбрав любой цвет в диапазоне 0-256. :) К сожалению, я считаю, что CodeBlocks имеет более позднюю сборку библиотеки 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

Простой подход ...

system("Color F0");

Буква представляет цвет фона, а число представляет цвет текста.

0 = черный

1 = синий

2 = Зеленый

3 = Аква

4 = красный

5 = фиолетовый

6 = желтый

7 = Белый

8 = серый

9 = голубой

A = светло-зеленый

B = Легкая вода

C = светло-красный

D = светло-фиолетовый

E = светло-желтый

F = Ярко-Белый

0
user7504718

system("COLOR 0A");»

где 0A - комбинация цвета фона и шрифта 0

0
Akash Rc