Ajouter des couleurs dans la console en Pascal
Les applications console en Pascal/Delphi peuvent sembler austères, mais elles peuvent en réalité afficher jusqu’à 16 couleurs différentes pour rendre vos programmes plus visuels et conviviaux. Dans cet article, nous allons explorer comment manipuler les couleurs de la console Windows en Pascal.
Prérequis#
Pour utiliser les fonctions de couleur, vous devez inclure l’unité Windows dans votre programme :
program ConsoleColors;
uses
Windows, SysUtils;Comprendre le système de couleurs#
La console Windows utilise un système de 16 couleurs (0-15) :
- 0-7 : Couleurs de base (sombres)
- 8-15 : Versions claires des mêmes couleurs
Chaque couleur peut être appliquée au texte (premier plan) ou à l’arrière-plan.
Fonction principale de couleur#
Voici la procédure essentielle pour changer les couleurs :
PROCEDURE SetColor(foreground: byte; background: byte);
Begin
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), foreground + (background * 16));
End;Comment ça fonctionne ?#
foreground: Couleur du texte (0-15)background: Couleur de fond (0-15)background * 16: Décale les bits de fond vers les 4 bits supérieursforeground + (background * 16): Combine les deux valeurs
Afficher toutes les couleurs disponibles#
Pour voir toutes les couleurs disponibles, créons une procédure de démonstration :
PROCEDURE ShowAllColors();
var
i: integer;
Begin
writeln('=== Palette de couleurs disponibles ===');
writeln;
FOR i := 0 TO 15 do
Begin
SetColor(7, 0); // Couleur par défaut pour les étiquettes
write(i:2, ' --> ');
SetColor(i, 0); // Texte coloré sur fond noir
writeln('■■■■■■■■■■');
End;
SetColor(7, 0); // Retour à la couleur par défaut
writeln;
writeln('Légende des couleurs :');
writeln('0: Noir 1: Bleu foncé 2: Vert foncé 3: Cyan foncé');
writeln('4: Rouge 5: Magenta 6: Brun 7: Gris clair');
writeln('8: Gris 9: Bleu clair 10: Vert clair 11: Cyan clair');
writeln('12: Rouge 13: Magenta 14: Jaune 15: Blanc');
End;Procédures utilitaires#
Écrire du texte en couleur#
Pour éviter de répéter SetColor() avant et après chaque écriture :
PROCEDURE WriteColor(text: string; textColor: byte; bgColor: byte = 0);
Begin
SetColor(textColor, bgColor);
write(text);
SetColor(7, 0); // Retour à la couleur par défaut
End;
PROCEDURE WriteLnColor(text: string; textColor: byte; bgColor: byte = 0);
Begin
WriteColor(text + #13#10, textColor, bgColor);
End;Effacer l’écran avec une couleur de fond#
PROCEDURE ClearScreen(bgColor: byte = 0);
var
csbi: TConsoleScreenBufferInfo;
consoleHandle: THandle;
coord: TCoord;
written: DWORD;
size: DWORD;
Begin
consoleHandle := GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(consoleHandle, csbi);
size := csbi.dwSize.X * csbi.dwSize.Y;
coord.X := 0;
coord.Y := 0;
FillConsoleOutputCharacter(consoleHandle, ' ', size, coord, written);
FillConsoleOutputAttribute(consoleHandle, bgColor, size, coord, written);
SetConsoleCursorPosition(consoleHandle, coord);
End;Exemple pratique complet#
Voici un programme complet qui démontre l’utilisation des couleurs :
program ConsoleColorsDemo;
uses
Windows, SysUtils, Crt;
// Procédures de couleur (définies ci-dessus)
PROCEDURE SetColor(foreground: byte; background: byte);
Begin
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), foreground + (background * 16));
End;
PROCEDURE WriteColor(text: string; textColor: byte; bgColor: byte = 0);
Begin
SetColor(textColor, bgColor);
write(text);
SetColor(7, 0);
End;
PROCEDURE WriteLnColor(text: string; textColor: byte; bgColor: byte = 0);
Begin
WriteColor(text + #13#10, textColor, bgColor);
End;
PROCEDURE ShowAllColors();
var
i: integer;
Begin
WriteLnColor('=== Palette de couleurs ===', 15, 1);
writeln;
FOR i := 0 TO 15 do
Begin
SetColor(7, 0);
write(i:2, ' --> ');
SetColor(i, 0);
writeln('■■■■■■■■■■');
End;
SetColor(7, 0);
writeln;
End;
var
choix: char;
Begin
ClearScreen(0);
WriteLnColor('=== Programme de démonstration des couleurs ===', 14, 1);
writeln;
writeln('1. Afficher la palette de couleurs');
writeln('2. Texte en couleur');
writeln('3. Quitter');
writeln;
write('Votre choix (1-3) : ');
choix := readkey;
writeln;
case choix of
'1': ShowAllColors;
'2':
begin
WriteLnColor('Ce texte est rouge sur fond jaune', 4, 14);
WriteLnColor('Ce texte est vert clair sur fond bleu', 10, 1);
WriteLnColor('Ce texte est blanc brillant sur fond noir', 15, 0);
end;
'3': exit;
end;
writeln;
WriteLnColor('Appuyez sur une touche pour quitter...', 7, 0);
readkey;
End.Bonnes pratiques#
1. Toujours restaurer les couleurs par défaut#
Après avoir écrit du texte coloré, restaurez les couleurs par défaut :
SetColor(7, 0); // Texte gris clair sur fond noir2. Utiliser des constantes pour la lisibilité#
const
COLOR_BLACK = 0;
COLOR_BLUE = 1;
COLOR_GREEN = 2;
COLOR_CYAN = 3;
COLOR_RED = 4;
COLOR_MAGENTA = 5;
COLOR_BROWN = 6;
COLOR_LIGHT_GRAY = 7;
COLOR_GRAY = 8;
COLOR_LIGHT_BLUE = 9;
COLOR_LIGHT_GREEN = 10;
COLOR_LIGHT_CYAN = 11;
COLOR_LIGHT_RED = 12;
COLOR_LIGHT_MAGENTA = 13;
COLOR_YELLOW = 14;
COLOR_WHITE = 15;
// Utilisation
WriteLnColor('Erreur critique !', COLOR_LIGHT_RED, COLOR_BLACK);3. Éviter les combinaisons difficiles à lire#
Certaines combinaisons de couleurs sont peu lisibles :
- Texte jaune sur fond blanc
- Texte bleu clair sur fond cyan clair
- Texte vert sur fond vert clair
4. Tester sur différents terminaux#
Les couleurs peuvent varier selon :
- La version de Windows
- Les paramètres d’accessibilité
- Les thèmes de console personnalisés
Limitations et alternatives#
Limitations#
- 16 couleurs seulement : Pas de millions de couleurs comme en mode graphique
- Windows uniquement : Ces fonctions ne fonctionnent pas sur Linux/macOS
- Pas de transparence : Les couleurs sont opaques
Alternatives modernes#
Pour des applications plus avancées, considérez :
- Bibliothèques graphiques : SDL, OpenGL
- Frameworks UI : FireMonkey, VCL
- Bibliothèques console avancées : Crt, Console
Conclusion#
Les couleurs en console Pascal/Delphi peuvent transformer radicalement l’expérience utilisateur de vos applications. Bien que limitées à 16 couleurs, elles permettent de créer des interfaces plus intuitives et visuellement attrayantes.
Vous avez maintenant toutes les clés pour rendre vos programmes console plus colorés et professionnels !