 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Timour Guest
|
Posted: Thu Jan 29, 2004 7:37 pm Post subject: Colors |
|
|
Bonjour,
J'aimerais savoir si on peut modifer la couleur de la police dans un
programme C ++ ( p.e écrire le fameux Hello World en rouge etc )
Merci de vos réponses.
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jan 29, 2004 8:41 pm Post subject: Re: Colors |
|
|
On Thu, 29 Jan 2004 19:37:48 +0000, Timour <timythe (AT) freemail (DOT) ru>
wrote:
| Quote: | J'aimerais savoir si on peut modifer la couleur de la police dans un
programme C ++ ( p.e écrire le fameux Hello World en rouge etc )
|
En général, non.
Toutefois, sur certains systèmes (Windows et Linux en font
vraisemblablement partie), ça doit être possible en utilisant des
méthodes spécifiques à l'OS. A moins que (N)curses sache faire ça.
--
;-)
http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jan 29, 2004 11:02 pm Post subject: Re: Colors |
|
|
On Thu, 29 Jan 2004 23:55:34 +0000, Timour <timythe (AT) freemail (DOT) ru>
wrote:
| Quote: | Hum ok, mais pouvez vous donner quelques exemples?
|
Non. Du moins, pas ici. Cf :
- la FAQ de fr.comp.lang.c++ (Google est ton ami)
- la table des forums fr.* pour trouver un forum où ta question
est en charte (Google est ton ami)
- les FAQ et charte du forum où tu comptes poster
--
;-)
http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Thu Jan 29, 2004 11:03 pm Post subject: Re: Colors |
|
|
On Thu, 29 Jan 2004 23:55:34 +0000, Timour <timythe (AT) freemail (DOT) ru>
wrote:
| Quote: | En ce qui
concerne(N)curses, je vois pas vraiment ce que c'est.
|
<http://www.google.com/>
<http://www.google.com/advanced_group_search?hl=en>
--
;-)
http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2
|
|
| Back to top |
|
 |
Timour Guest
|
Posted: Thu Jan 29, 2004 11:55 pm Post subject: Re: Colors |
|
|
Fabien LE LEZ wrote:
| Quote: | En général, non.
Toutefois, sur certains systèmes (Windows et Linux en font
vraisemblablement partie), ça doit être possible en utilisant des
méthodes spécifiques à l'OS. A moins que (N)curses sache faire ça.
Hum ok, mais pouvez vous donner quelques exemples? Je suis sous Linux, |
mais je ne vois pas comment on pourrait faire ca. En ce qui
concerne(N)curses, je vois pas vraiment ce que c'est.(Je suis débutant
en C++ et Linux aussi d'ailleurs.)
Merci
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Fri Jan 30, 2004 9:42 am Post subject: Re: Colors |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> wrote
| Quote: | On Thu, 29 Jan 2004 19:37:48 +0000, Timour <timythe (AT) freemail (DOT) ru
wrote:
J'aimerais savoir si on peut modifer la couleur de la police dans un
programme C ++ ( p.e écrire le fameux Hello World en rouge etc )
En général, non.
Toutefois, sur certains systèmes (Windows et Linux en font
vraisemblablement partie), ça doit être possible en utilisant des
méthodes spécifiques à l'OS.
|
Ça dépend plutôt du terminal. Sur mon vieux Sparc, j'ai un écran noir
et blanc -- ça a beau être Unix, je n'arrive pas à afficher en rouge.
Il y a des séquences d'échappement pour changer le couleur dans un
XTerm, à condition que support des couleurs a été activé lors de la
compilation. La même chose vaut pour une fenêtre console sous Windows@;
elle se sert même des mêmes séquences d'échappement. (Pas vraiment
étonnant, vue qu'elles font partie d'une norme ANSI.)
Il y a quand même quelques hics :
- Dans le cas d'xterm, il faut bien qu'il soit compilé avec les bonnes
options. Ce qui n'est pas toujours le cas -- l'xterm livré par
défaut avec Solaris ne l'est pas, par exemple. (Mais celui de le
Linux Mandrake si.)
- Les couleurs sont spécifiées par un nombre, et non un nom. Dans le
cas d'xterm, l'utilisateur peut changer l'affectation des couleurs
au moyen de xrdb, et les couleurs dans la fenêtre console sous ne
sont pas exactement ce auxquelles je m'attendrais non plus. La norme
ANSI dit que rouge, c'est 1, mais chez moi, sous Solaris, rouge est
4 (et 1, c'est un espèce de jaune ou crême très pale), tandis que
sous Windows, 1, c'est un rouge très foncé, pas du tout ce auquel je
m'attendrais sous le vocable rouge, et il n'y a pas de rouge vif.
Enfin, à titre d'information, la séquence d'échappement, c'est
'
couleur de l'arrière plan, où <ESC>, c'est le caractère ASCII ESC, et
<n>, c'est le numéro de couleur.
| Quote: | A moins que (N)curses sache faire ça.
|
D'après la doc de xterm, il y a du support des couleurs dans ncurses. Ce
qui ne dit rien en ce qui concerne curses.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Thibault Guest
|
Posted: Fri Jan 30, 2004 12:04 pm Post subject: Re: Colors |
|
|
Timour wrote:
| Quote: | Bonjour,
J'aimerais savoir si on peut modifer la couleur de la police dans un
programme C ++ ( p.e écrire le fameux Hello World en rouge etc )
Merci de vos réponses.
Si ton programme s'execute dans une console ms dos essaye system("color |
4C"); et debut de la fonction main() sinon pour les autres console je ne
sais pas
|
|
| Back to top |
|
 |
Thibault Guest
|
Posted: Fri Jan 30, 2004 12:06 pm Post subject: Re: Colors |
|
|
Thibault wrote:
| Quote: | Timour wrote:
Bonjour,
J'aimerais savoir si on peut modifer la couleur de la police dans un
programme C ++ ( p.e écrire le fameux Hello World en rouge etc )
Merci de vos réponses.
Si ton programme s'execute dans une console ms dos essaye system("color
4C"); et debut de la fonction main() sinon pour les autres console je ne
sais pas
|
(si tu veut savoir les couleurs disponible pour la console ms dos tape
en ligne de commande color fsdfd)
|
|
| Back to top |
|
 |
Timour Guest
|
Posted: Fri Jan 30, 2004 1:12 pm Post subject: Re: Colors |
|
|
[email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
| Quote: | Enfin, à titre d'information, la séquence d'échappement, c'est
'<ESC>[3<n>m' pour la couleur d'affichage, et '<ESC>[4<n>m' pour la
couleur de l'arrière plan, où <ESC>, c'est le caractère ASCII ESC, et
n>, c'est le numéro de couleur.
|
Je vois, mais je ne sais pas où l'insérer, pourriez-vous l'insérer dans
ce source?:
#include
int main()
{
std::cout << " Hello World !n" ;
return 0;
}
|
|
| Back to top |
|
 |
Timour Guest
|
Posted: Fri Jan 30, 2004 1:19 pm Post subject: Re: Colors |
|
|
Thibault wrote:
| Quote: | Thibault wrote:
Timour wrote:
Bonjour,
J'aimerais savoir si on peut modifer la couleur de la police dans un
programme C ++ ( p.e écrire le fameux Hello World en rouge etc )
Merci de vos réponses.
Si ton programme s'execute dans une console ms dos essaye
system("color 4C"); et debut de la fonction main() sinon pour les
autres console je ne sais pas
(si tu veut savoir les couleurs disponible pour la console ms dos tape
en ligne de commande color fsdfd)
D'accord. Je viens d'essayer sous linux mais le compilateur G++ me dit |
que la norme ISO C++ l'interdit. J'essayerai sous Windows quand je serai
sous ce dernier. Merci
|
|
| Back to top |
|
 |
Yannick Le goc Guest
|
Posted: Fri Jan 30, 2004 2:32 pm Post subject: Re: Colors |
|
|
Une piste peut etre, gcc sous linux par defaut ecrit ses commentaires
sur la console en une seule couleur, toutefois lorsqu'on installe le
paquetage gcc-colorgcc les messages s'affichent en couleur.
c'est a base de script perl qui prend la sortie gcc pour la formater sur
la sortie console.
|
|
| Back to top |
|
 |
James Kanze Guest
|
Posted: Sun Feb 01, 2004 12:10 pm Post subject: Re: Colors |
|
|
Timour <timythe (AT) freemail (DOT) ru> writes:
| Quote: | kanze (AT) gabi-soft (DOT) fr wrote:
Enfin, à titre d'information, la séquence d'échappement,
c'est '<ESC>[3<n>m' pour la couleur d'affichage, et '<ESC>[4<n>m'
pour la couleur de l'arrière plan, où <ESC>, c'est le
caractère ASCII ESC, et <n>, c'est le numéro de couleur.
Je vois, mais je ne sais pas où l'insérer, pourriez-vous
l'insérer dans ce source?:
|
Où tu veux la couleur, évidemment. Mais attention, ce n'est pas si
facile que ça.
| Quote: | #include
int main()
{
std::cout << " Hello World !n" ;
|
La première approximation serait :
try {
std::cout << " " RED "Hello, world!" NORMAL "n" ;
} catch ( ... ) {
std::cout << NORMAL ;
std::cout.flush() ;
abort() ;
}
avec des #define :
#define ESC " 33"
#define RED ESC "[31m"
#define NORMAL ESC "[0m"
C'est quoi, ça ?
Pour expérimenter, je conseillerais quelque chose comme le programme
suivant pour commencer :
#include
#include <iostream>
#include <string>
enum Color
{
black ,
red ,
green ,
yellow ,
blue ,
magenta ,
cyan ,
white ,
lastColor ,
firstColor = black
} ;
inline Color&
operator++( Color& c )
{
assert( c < lastColor ) ;
c = static_cast< Color >( c + 1 ) ;
return c ;
}
inline Color
operator++( Color& c, int )
{
Color result = c ;
++ c ;
return result ;
}
char const *const colorNames[] =
{
"black" ,
"red" ,
"green" ,
"yellow" ,
"blue" ,
"magenta",
"cyan" ,
"white" ,
} ;
char const colorDigits[] = "01234567" ;
std::string
esc()
{
return std::string( 1, ' 33' ) ;
}
std::string
fgColor( Color c )
{
assert( c >= 0 && c < 10 ) ;
return esc() + "[3" + colorDigits[ c ] + 'm' ;
}
std::string
bgColor( Color c )
{
assert( c >= 0 && c < 10 ) ;
return esc() + "[4" + colorDigits[ c ] + 'm' ;
}
std::string
normal()
{
return esc() + "[0m" ;
}
std::string
centered( std::string const& s, int width )
{
std::string result( s ) ;
int pad = width - result.size() ;
if ( pad > 0 ) {
result.insert( result.begin(), pad / 2, ' ' ) ;
result.insert( result.end(), pad - pad / 2, ' ' ) ;
}
return result ;
}
int
main()
{
for ( Color i = firstColor ; i < lastColor ; ++ i ) {
std::cout
<< bgColor( i ) << centered( colorNames[ i ], 10 ) << normal()
<< fgColor( i ) << centered( colorNames[ i ], 10 ) << normal()
<< 'n' ;
}
return 0 ;
}
Mais comme j'ai déjà dit, méfie-toi de la réalité des
couleurs:-). Sur ma boîte Linux, c'est à peu près correct. Le
blanc, c'est en fait un gris clair, et les autres couleurs sont toutes
un peu plus foncées que je m'y attendrais. Sous Windows, c'est
semblable. Mais dans un XTerm, au moins, ça dépend aussi de la
configuration de chaque utilisateur, de ce qu'il a dans son .Xdefauts.
Si le but c'est de s'ammuser un peu, ce que j'offre ci-dessus va bien,
mais c'est loins d'être suffisant pour une application
professionnelle. (Mais une application professionnelle, il va se servir
des fenêtres graphiques de toute façon, si elle veut des
affichages particuliers.)
--
James Kanze mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
|
|
| Back to top |
|
 |
Timour Guest
|
Posted: Sun Feb 01, 2004 2:14 pm Post subject: Re: Colors |
|
|
Oui le but était de s'amuser un peu. Même si je comprends que la moitié
du programme que vous avez écrit je le trouve bien fait !
Va falloir que je me renseigne un peu sur les éléments de votre
programme que je ne connais pas. Merci beaucoup .
Allez je file, j'ai du boulot : ))
James Kanze wrote:
| Quote: | Timour <timythe (AT) freemail (DOT) ru> writes:
|> [email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
|> > Enfin, à titre d'information, la séquence d'échappement,
|> > c'est '<ESC>[3<n>m' pour la couleur d'affichage, et '<ESC>[4<n>m'
|> > pour la couleur de l'arrière plan, où <ESC>, c'est le
|> > caractère ASCII ESC, et <n>, c'est le numéro de couleur.
|> Je vois, mais je ne sais pas où l'insérer, pourriez-vous
|> l'insérer dans ce source?:
Où tu veux la couleur, évidemment. Mais attention, ce n'est pas si
facile que ça.
|> #include
|> int main()
|> {
|> std::cout << " Hello World !n" ;
La première approximation serait :
try {
std::cout << " " RED "Hello, world!" NORMAL "n" ;
} catch ( ... ) {
std::cout << NORMAL ;
std::cout.flush() ;
abort() ;
}
avec des #define :
#define ESC " 33"
#define RED ESC "[31m"
#define NORMAL ESC "[0m"
|> std::cout << " 19
C'est quoi, ça ?
|> return 0;
|> }
Pour expérimenter, je conseillerais quelque chose comme le programme
suivant pour commencer :
#include <ostream
#include
#include
enum Color
{
black ,
red ,
green ,
yellow ,
blue ,
magenta ,
cyan ,
white ,
lastColor ,
firstColor = black
} ;
inline Color&
operator++( Color& c )
{
assert( c < lastColor ) ;
c = static_cast< Color >( c + 1 ) ;
return c ;
}
inline Color
operator++( Color& c, int )
{
Color result = c ;
++ c ;
return result ;
}
char const *const colorNames[] =
{
"black" ,
"red" ,
"green" ,
"yellow" ,
"blue" ,
"magenta",
"cyan" ,
"white" ,
} ;
char const colorDigits[] = "01234567" ;
std::string
esc()
{
return std::string( 1, ' 33' ) ;
}
std::string
fgColor( Color c )
{
assert( c >= 0 && c < 10 ) ;
return esc() + "[3" + colorDigits[ c ] + 'm' ;
}
std::string
bgColor( Color c )
{
assert( c >= 0 && c < 10 ) ;
return esc() + "[4" + colorDigits[ c ] + 'm' ;
}
std::string
normal()
{
return esc() + "[0m" ;
}
std::string
centered( std::string const& s, int width )
{
std::string result( s ) ;
int pad = width - result.size() ;
if ( pad > 0 ) {
result.insert( result.begin(), pad / 2, ' ' ) ;
result.insert( result.end(), pad - pad / 2, ' ' ) ;
}
return result ;
}
int
main()
{
for ( Color i = firstColor ; i < lastColor ; ++ i ) {
std::cout
bgColor( i ) << centered( colorNames[ i ], 10 ) << normal()
fgColor( i ) << centered( colorNames[ i ], 10 ) << normal()
'n' ;
}
return 0 ;
}
Mais comme j'ai déjà dit, méfie-toi de la réalité des
couleurs:-). Sur ma boîte Linux, c'est à peu près correct. Le
blanc, c'est en fait un gris clair, et les autres couleurs sont toutes
un peu plus foncées que je m'y attendrais. Sous Windows, c'est
semblable. Mais dans un XTerm, au moins, ça dépend aussi de la
configuration de chaque utilisateur, de ce qu'il a dans son .Xdefauts.
Si le but c'est de s'ammuser un peu, ce que j'offre ci-dessus va bien,
mais c'est loins d'être suffisant pour une application
professionnelle. (Mais une application professionnelle, il va se servir
des fenêtres graphiques de toute façon, si elle veut des
affichages particuliers.)
|
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|