Niemalże każda konsola systemowa ma ten sam układ kolorów: czarne tło i białe napisy. Oczywiście konsola ma być przejrzysta, funkcjonalna i nie zabierać dużo zasobów komputera. W przypadku platformy Windows® kolor tekstu oraz tła konsoli można dostosować. Zmiana kolorów wyświetlanego tekstu może się okazać bardzo pomocna. Przykładowo wszystkie błędy mogą być wyświetlane na kolor czerwony. Tego typu rozwiązanie raczej nadaje się do drobnych projektów kiedy dłużej pisałoby się kod interfejsu niż właściwy kod.
Na początek warto przyjrzeć się poleceniom konsoli, a konkretniej poleceniu COLOR. Polecenie to służy do ustawiania koloru tła oraz tekstu na podstawie dwóch znaków zapisanych w systemie szesnastkowym. Pierwszy znak oznacza kolor tła, a drugi kolor tekstu. Poniżej znajduje się tabelka, która przedstawia dostępne kolory:
Kod | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Kolor |
Wtedy, aby mieć czarny tekst na białym tle wystarczy odczytać, że biały kolor to F, a czarny to 0. Zapisać obok siebie pamiętając, że pierwszy znak oznacza kolor tła i zaakceptować polecenie:
W celu przywrócenia początkowego ustawienia kolorów można wpisać COLOR 07, ale zdecydowanie lepszym sposobem jest zresetowanie przy pomocy polecenia COLOR bez podawania argumentów:
W przypadku wybrania takiego samego koloru dla tła oraz tekstu nie uzyska się jednolitego koloru na powierzchni całej konsoli, ale zostanie zwrócony błąd.
Jednym z prostszych sposobów, który jest podawany dla osób zbytnio niewtajemniczonych w C++ jest właśnie wykorzystanie funkcji COLOR przy pomocy polecenia system(). Załóżmy, że program ma zmienić kolor konsoli na ciemnoniebieski, a kolor tekstu na jasnoniebieski. Wtedy wystarczy zaledwie (2.) jedna linijka kodu:
Wtedy po uruchomieniu programu konsola przyjmie następujący wygląd:
Niestety każde najprostsze rozwiązanie ma pewne ograniczenia. W tym przypadku każda zmiana koloru oznacza całkowite nadpisanie poprzednich ustawień. Z tego tą metodą nie można uzyskać tylko pojedynczej linijki pokolorowanej na inny kolor co ilustruje poniższy kod:
(2.) Zmiana tekstu koloru na czerwony (tło pozostaje czarne). (3.) Wypisanie błędu. (4.) Zresetowanie koloru. W tym przypadku reset koloru nie będzie dotyczył tylko tekstu wypisanego dalej, ale również poprzednio wypisanego. (5.) Wypisanie tekstu końcowego. Po uruchomieniu pojawi się taki wygląd konsoli:
Konsola systemowa umożliwia jednak nadawanie innego koloru nawet pojedynczym znakom. Jednak, aby tego dokonać należy dołączyć bibliotekę windows.h. Teraz w celu dopisania kolorowego tekstu potrzebny jest uchwyt na konsolę tak, aby można było wydawać do niej polecenia. Następnie przy pomocy poleceń SetConsoleTextAttribute() można ustawić dowolny wygląd tekstu. Jako argumenty funkcja przyjmuje kolejno: uchwyt konsoli oraz kolor zapisany w systemie dziesiętnym tj. wartość 0C powinna być przekazana jako 12 (a np. kod AA jako 170):
Program nie skompiluje się dopóki (2.) odpowiednia bibliotek nie zostanie dołączona. (7.) Zdobądź uchwyt konsoli. (8.) Ustal kolor dla błędu i (9.) go wypisz. (10.) Zresetuj kolor tekstu i (11.) pokaż kolejny komunikat. Jak widać teraz po uruchomieniu program wypisuje komunikaty zgodnie z wcześniejszymi oczekiwaniami:
Napisz program, który na ekran wypisze tego typu tabelkę:
Przedstawiony znak w tabelce to ■. Zgodnie z rozszerzona tablicą ASCII ma on kod 254, który można wpisać w C++ jako '\xFE'.