web-dev-qa-db-ja.com

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 CDev Cのような古いコンパイラで機能していました。今日のコンパイラでは、これらの関数は機能しません。 2つの関数SetColorChangeConsoleToColorsを指定します。これらの関数のコードをコピーしてプログラムに貼り付け、次の手順を実行します。私が提供しているコードは、一部のコンパイラでは動作しません。

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

この関数では、2つの数値を渡します。通常の色が必要な場合は、最初の数字をゼロに、2番目の数字を色に設定します。私の例は-

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

この場合、最初の数値をゼロ、2番目の数値を15として、白のコードが15であるためコンソールの色が白になるようにしました。これはcode :: blocksで機能しています。それがあなたにも役立つことを願っています。

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

CおよびC++の例については、 example.c および test.cpp をご覧ください。

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

N.B:これらのようなカラーコードの間にスペースを使用しないでください

system("color 4 1");

ただし、コードブロックを使用すると、すべてのカラーコードが表示されます。このトリックを使用して、サポートされているすべてのカラーコードを知ることができます。

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