Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2448 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++ débutant] Du texte en couleur dans la console ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ débutant] Du texte en couleur dans la console ?

n°1317519
ParadoX
Posté le 03-03-2006 à 01:43:06  profilanswer
 

Rebonjour,
 
Est-il possible de faire afficher du texte en console d'une certaine couleur ?  
Je n'ai pas trouvé grand chose sur google, ce n'est peut-être pas si évident que ça à faire ?
 
 :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
mood
Publicité
Posté le 03-03-2006 à 01:43:06  profilanswer
 

n°1317551
LePhasme
Les Belges domineront le monde
Posté le 03-03-2006 à 08:50:54  profilanswer
 

Avec la fonction system(), il y a une commande DOS pour changer la couleur du texte/fond, ca devrait fonctionner.

n°1317554
franceso
Posté le 03-03-2006 à 09:00:30  profilanswer
 

ParadoX a écrit :

Est-il possible de faire afficher du texte en console d'une certaine couleur ?  
Je n'ai pas trouvé grand chose sur google, ce n'est peut-être pas si évident que ça à faire ?


 
Je suppose que ça dépend de ta console. Sous linux, la plupart des consoles (peut-être toutes) se conforment aux séquences d'échappement ANSI
http://frexx.de/xterm-256-notes/, http://adm.lacitec.on.ca/~ymicha/m [...] scape.html
 
Après, est-ce que ça marche sur la console de windows, je n'en ai aucune idée...

Message cité 1 fois
Message édité par franceso le 03-03-2006 à 09:01:24
n°1317555
franceso
Posté le 03-03-2006 à 09:00:45  profilanswer
 

franceso a écrit :

Je suppose que ça dépend de ta console. Sous linux la plupart des consoles (peut-être toutes) se conforment aux séquences d'échappement ANSI
http://frexx.de/xterm-256-notes/, http://adm.lacitec.on.ca/~ymicha/m [...] scape.html
 
Après, est-ce que ça marche sur la console de windows, je n'en ai aucune idée...


 
désolé, pour le post en double : erreur de manipulation  :jap:


Message édité par franceso le 03-03-2006 à 09:03:44
n°1317709
ParadoX
Posté le 03-03-2006 à 12:42:04  profilanswer
 

Non je sais que ça marche, mais je ne sais pas si c'est difficile de le mettre en oeuvre ^^
Si oui, on laisse tomber :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1317771
franceso
Posté le 03-03-2006 à 13:44:26  profilanswer
 

Si tout marche bien, c'est rien de compliqué :
si tu disposes d'une commande DOS, ça peut se faire avec un system() comme l'a dit LePhasme
si tu utilises des séquences d'échappement ANSI, c'est simplement des caractères spéciaux à envoyer sur la sortie standard...

n°1317779
breizhbugs
Posté le 03-03-2006 à 13:50:49  profilanswer
 
n°1317808
ParadoX
Posté le 03-03-2006 à 14:32:03  profilanswer
 


Merci ça marche pas trop mal, je vais m'amuser avec ça :)
 :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318166
ParadoX
Posté le 03-03-2006 à 21:11:22  profilanswer
 


Hm je n'arrive pas à faire afficher chaque element de ma Liste de sa couleur :/
 
http://orgasm.free.fr/hfr/couleurs.PNG
 
Ya surement une erreur qqart :D
Chrisbk, t'es la ? (j'ai essayé de l'implémenter dans la classe Formater que tu m'as donnée, pour l'indentation !)
 


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318193
ParadoX
Posté le 03-03-2006 à 21:53:34  profilanswer
 

Je suis tombé la dessus:
http://www.codeproject.com/cpp/AddColorConsole.asp
 
ça a l'air de marcher, sauf que ça coince avec ma classe Formater
 

Code :
  1. #include "formater.h"
  2.  
  3. // ---------------------------------- Constructeurs / Destructeurs---------------------------------- //
  4.  
  5. Formater::Formater(ostream &pOut) : out(pOut), niveauIndentation(0) {};
  6. // ------------------------------------------- Méthodes -------------------------------------------- //
  7. void Formater::incrementeIndentation()
  8. {
  9. niveauIndentation++;
  10. }
  11. void Formater::decrementeIndentation()
  12. {
  13. niveauIndentation--;
  14. }
  15. void Formater::affichage(const char *tmp)
  16. {
  17. for (int i = 0; i < niveauIndentation; i++)
  18. {
  19.  out << "---";
  20. }
  21. out << tmp;
  22. }


 
qui elle aussi touche à cout .. y-a-t'il un moyen de coupler les 2 ? :sweat:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
mood
Publicité
Posté le 03-03-2006 à 21:53:34  profilanswer
 

n°1318228
breizhbugs
Posté le 03-03-2006 à 22:52:26  profilanswer
 

ParadoX a écrit :


Hm je n'arrive pas à faire afficher chaque element de ma Liste de sa couleur :/


Si tu disais precisement ce que tu veux comme resultat (avec un exemple) ca serait plus facile de t'aider...
Mais je pense que tu n'as pas mise ton instruction de couleur au bont endroit...


Message édité par breizhbugs le 03-03-2006 à 22:53:24
n°1318380
ParadoX
Posté le 04-03-2006 à 12:12:05  profilanswer
 

Chaque Forme dans la liste a comme donnée membre un int qui indique sa couleur. J'aimerais faire afficher ce texte en fonction de la couleur de chaque forme. C'est à dire si un trianlge est rouge, le faire afficher en rouge ! :)
 
Il ya juste que cout a été redéfini 2 fois, une fois ds ma classe plus haut, et une fois dans le code de cette gestion des couleurs. je voulais simplement savoir comment les faire coexister ! :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318407
ParadoX
Posté le 04-03-2006 à 13:19:50  profilanswer
 

Voila, j'ai trouvé plus simple:
http://www.cppfrance.com/code.aspx?ID=9234
 
Mais je ne parviens tjrs pas à changer les couleurs quand il faut :(
 
Dans ma liste:

Code :
  1. // Affichage formaté de la liste en mode texte
  2. void Liste::afficher(Formater &tmp) const
  3. {
  4. if(!estVide())
  5. {
  6.  Iterateur monIterateur(*this);
  7.  cout << endl;
  8.  while(!monIterateur.finDeListe())
  9.  {
  10.   cout << " +-";
  11.   monIterateur.valeur()->Print(tmp);
  12.   monIterateur.avance();
  13.  }
  14. }
  15. else
  16. {
  17.  cout << " (Vide)\n";
  18. }
  19. }


 
monIterateur.valeur()->Print(tmp); est l'element actuel, c'est à dire soit une forme, soit un groupe. Seul une forme a une couleur.
 
voici les Print() de forme et de groupe:
 

Code :
  1. // Affichage du nom de la forme pour l'affichage formaté
  2. void Forme::Print(Formater &tmp) const
  3. {
  4. tmp.affichage(this->nom);
  5. cout << "\n";
  6. }


 

Code :
  1. // Affichage formaté (pour l'affichage formaté de la liste principale)
  2. void Groupe::Print(Formater &tmp) const
  3. {
  4. tmp.affichage(nom);
  5. tmp.incrementeIndentation();
  6. this->monGroupe.afficher(tmp);
  7. tmp.decrementeIndentation();
  8. }


 
Maintenant, j'ai beau ajouter

Code :
  1. textcolor(getCouleur());

avant et

Code :
  1. textcolor(WHITE);

après l'affichage de la forme, ça ne donne jamais ce que je veux. :(


Message édité par ParadoX le 04-03-2006 à 13:20:14

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318420
breizhbugs
Posté le 04-03-2006 à 14:12:31  profilanswer
 

Citation :


monIterateur.valeur()->Print(tmp); est l'element actuel, c'est à dire soit une forme, soit un groupe. Seul une forme a une couleur.


Non! une forme et un groupe ont aussi une couleur: la couleur par defaut!
 

Citation :


Maintenant, j'ai beau ajouter

Code :
  1. textcolor(getCouleur());

avant et

Code :
  1. textcolor(WHITE);

après l'affichage de la forme, ça ne donne jamais ce que je veux. :(


Comment ca se fait qu'on ne les voient nulles par dans le peu de code que tu donnes!

n°1318423
ParadoX
Posté le 04-03-2006 à 14:20:30  profilanswer
 

Parce que j'ai essayé tous les endroits possibles et imaginables, mais le plus logique me parait etre ici:
 
 

Code :
  1. // Affichage du nom de la forme pour l'affichage formaté
  2. void Forme::Print(Formater &tmp) const
  3. {
  4.         textcolor(getCouleur());
  5. tmp.affichage(this->nom);
  6. cout << "\n";
  7.         textcolor(WHITE);
  8. }


 
et le groupe on laisse tel quel
 

Code :
  1. // Affichage formaté (pour l'affichage formaté de la liste principale)
  2. void Groupe::Print(Formater &tmp) const
  3. {
  4. tmp.affichage(nom);
  5. tmp.incrementeIndentation();
  6. this->monGroupe.afficher(tmp);
  7. tmp.decrementeIndentation();
  8. }


 
mais ça ne marche pas vraiment :(


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318430
breizhbugs
Posté le 04-03-2006 à 15:06:43  profilanswer
 

en gros, tu veux ca:
http://img68.imageshack.us/img68/649/coul5bn.jpg
?
et getcolor() ca sort d'ou?
 
Comme j'ai pas tout suivi, fais un schema avec tes classes et les relations entre elles, idealement, donne le header de chaque classe...


Message édité par breizhbugs le 04-03-2006 à 15:09:05
n°1318435
ParadoX
Posté le 04-03-2006 à 15:27:27  profilanswer
 

Presque ! Chaque forme peut avoir n'importe quelle couleur ! Je veux juste afficher chaque forme de SA couleur. Il peut y avoir plusieurs formes de différentes couleurs au sein d'un groupe ! :)
 
Shéma des classes, en haut à droite:
 
http://orgasm.free.fr/hfr/shemac++.jpg
(entre FORME et le Triangle, Carre et Parallelogramme, rajouter une classe Polygone)
 
Puis les headers:
 

Code :
  1. class Objet
  2. {
  3. protected:
  4.  char *nom;
  5.  char *type;
  6.  bool estLibre;
  7. public:
  8.  Objet();
  9.  Objet(char *nom, char *type);
  10.  ~Objet();
  11.  virtual void Print(Formater& ) const;
  12.  virtual void Print() const;
  13.  bool getEstLibre() const;
  14.  void setEstLibre();
  15.  char* getNom() const;
  16.  char* getType() const;
  17.  friend ostream& operator << (ostream&, const coordonnee& );
  18.  friend coordonnee operator >> (istream&, coordonnee& );
  19. };
  20. #endif


 

Code :
  1. class Forme : public Objet
  2. {
  3. protected :
  4.  char *type;
  5.  unsigned int couleur;
  6. public :
  7. Forme(char*, char*, unsigned int);
  8. virtual void Print(Formater& ) const;
  9. virtual void Print() const;
  10. virtual void changeCoords();
  11. int getCouleur() const;
  12. };


 

Code :
  1. class Groupe : public Objet
  2. {
  3. friend class Iterateur_w;
  4. friend class Liste;
  5. protected:
  6.  Liste monGroupe;
  7. public:
  8.  Groupe(char *nom);
  9.  Liste& getMonGroupe();
  10.  bool ajout(Objet*);
  11.  bool supprimer(Objet*);
  12.  void vider();
  13.  void move(Objet*, Groupe*);
  14.  virtual void Print(Formater& ) const;
  15.  virtual void Print() const;
  16. };


 
Puis, dérivés de FORME:  
 

  • Polygone  

--> Carre
--> Parallelogramme
--> Triangle
 

  • Rond


Headers ((je mets juste Rond et Polygone)

Code :
  1. class Polygone : public Forme
  2. {
  3. protected:
  4.  unsigned int nbSommets;
  5. public:
  6.  Polygone(char*, char*, unsigned int, unsigned int);
  7.  ~Polygone();
  8.  int getNbSommets() const;
  9.  virtual void Print() const;
  10.  virtual void changeCoords();
  11. };


Code :
  1. class Rond : public Forme
  2. {
  3. protected:
  4.  coordonnee origine;
  5.  double rayon;
  6. public:
  7.  Rond(char*, unsigned int, coordonnee, double);
  8.  ~Rond();
  9.  virtual void Print() const;
  10.  virtual void changeCoords();
  11. };


 
 :jap:


Message édité par ParadoX le 04-03-2006 à 15:29:22

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318441
++fab
victime du syndrome IH
Posté le 04-03-2006 à 15:53:25  profilanswer
 

Une classe de base utilisée plymorphiquement doit avoir un destructeur virtuel public.  Sinon, c'est pas la moyenne :o
L'acces aux membres d'une classe est normalement privé par défaut, et non protected.  

n°1318443
breizhbugs
Posté le 04-03-2006 à 15:55:27  profilanswer
 

Tu definie le code de print() dans la classe forme
Que fait print() dans les classes derivés?

n°1318461
ParadoX
Posté le 04-03-2006 à 16:28:09  profilanswer
 

++fab a écrit :

Une classe de base utilisée plymorphiquement doit avoir un destructeur virtuel public.  Sinon, c'est pas la moyenne :o
L'acces aux membres d'une classe est normalement privé par défaut, et non protected.


 
J'ai rajouté le destructeur virtual ds objet :)
Faut également le mettre dans Forme et Groupe ?
Protected parce que je veux que les classes dérivées y aient accès, non ? :sweat:  
 
breizhbugs --> le Print() sans parametres dans les formes (triangle, etc) est un autre print, pour faire afficher les propriétés d'une forme particuliere, cette fonction n'a rien à voir avec l'affichage coloré de la liste.
 
Le virtual void Print(Formater& ) const; est précisé jusqu'a Forme.h, pas plus loin (chaque forme ayant une couleur)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318463
++fab
victime du syndrome IH
Posté le 04-03-2006 à 16:35:44  profilanswer
 

ParadoX a écrit :

Faut également le mettre dans Forme et Groupe ?


Non.
 

Citation :

Protected parce que je veux que les classes dérivées y aient accès, non ? :sweat:


Les classes dérivées passeront par les accesseurs. Avec un acces protected, tu ne peux pas garantir le maintien des invariants (pour le peu que tu en ais). Les classes dérivées pouvant en faire ce qu'elles veulent, sans connaissances des invariants de la classe de base. L'usage de protected, dans ton cas d'école, est donc généralement une mauvaise idée.
 

n°1318465
breizhbugs
Posté le 04-03-2006 à 16:39:54  profilanswer
 

Le meiux serait que tu mettes tout ton projet dans un zip que l'on puisse l'analyser/tester nous meme parce que moi j'ai du mal a voir d'ou peut venir l'erreur de couleur!

n°1318466
ParadoX
Posté le 04-03-2006 à 16:40:32  profilanswer
 

++fab a écrit :

Non.
 

Citation :

Protected parce que je veux que les classes dérivées y aient accès, non ? :sweat:


Les classes dérivées passeront par les accesseurs. Avec un acces protected, tu ne peux pas garantir le maintien des invariants (pour le peu que tu en ais). Les classes dérivées pouvant en faire ce qu'elles veulent, sans connaissances des invariants de la classe de base. L'usage de protected, dans ton cas d'école, est donc généralement une mauvaise idée.


 
D'accord. Et sinon, j'ai vérifié, et dans Forme / Groupe (issus de Objet), je n'ai aucun destructeur. Faut il en mettre un vide, ou c'est bon comme ça ?
Le prof nous avait dit qu'il était mieux d'en mettre un et de ne rien mettre dedans, genre " // rien à faire" pour montrer qu'on a compris.
 
Mais la, ds tous les cas, le destructeur de Objet sera appellé, non ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318467
ParadoX
Posté le 04-03-2006 à 16:40:57  profilanswer
 

breizhbugs a écrit :

Le meiux serait que tu mettes tout ton projet dans un zip que l'on puisse l'analyser/tester nous meme parce que moi j'ai du mal a voir d'ou peut venir l'erreur de couleur!


 
C'est parti, j'upload ^^


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318470
ParadoX
Posté le 04-03-2006 à 16:45:06  profilanswer
 

Voila. Je prends toutes les critiques, si ça peut m'améliorer la note.
http://isfates.no-ip.org/hfr/c++/
 
Ceci n'est que la structure de données, l'interface utilisateur qui l'utilisera est développée par mon binome.
C'est du Visual Studio 6 :jap:
 
Le projet n'est pas finalisé à 100%, hein

Message cité 1 fois
Message édité par ParadoX le 04-03-2006 à 16:46:24

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1318472
++fab
victime du syndrome IH
Posté le 04-03-2006 à 16:49:50  profilanswer
 

ParadoX a écrit :

D'accord. Et sinon, j'ai vérifié, et dans Forme / Groupe (issus de Objet), je n'ai aucun destructeur. Faut il en mettre un vide, ou c'est bon comme ça ?


C'est bon comme ça.
 

Citation :

Le prof nous avait dit qu'il était mieux d'en mettre un et de ne rien mettre dedans, genre " // rien à faire" pour montrer qu'on a compris.


Dans l'ordre des choses : au début, tu n'as rien à libérer/détruire, et tu oublies de définir le destructeur (et par chance, ça n'entraine rien de grave), ensuite, tu prends conscience de l'existence des destructeurs, et tu définis un destructeur -- éventuellement avec un corp vide. Ensuite, tu apprends que s'il n'y a pas de destructeurs, il est alors implicitement déclaré inline, et défini avec un corp vide si utilisé.
 

Citation :

Mais la, ds tous les cas, le destructeur de Objet sera appellé ?


Oui.


Message édité par ++fab le 04-03-2006 à 16:50:29
n°1318502
breizhbugs
Posté le 04-03-2006 à 18:20:00  profilanswer
 

ParadoX a écrit :

Voila. Je prends toutes les critiques, si ça peut m'améliorer la note.
http://isfates.no-ip.org/hfr/c++/


Euh, dsl mais j'ai dit zip, pas rar!
(j'ai bien essayer un log mais il me dit header corrompu ou un truc dans le genre)

n°1318511
ParadoX
Posté le 04-03-2006 à 18:28:05  profilanswer
 
n°1318563
breizhbugs
Posté le 04-03-2006 à 20:45:10  profilanswer
 


Bon ca fait 1/2 heure que je regarde je comprends pas le probleme pour les couleurs...

n°1318565
ParadoX
Posté le 04-03-2006 à 20:47:49  profilanswer
 

Jsuis pas le seul alors :sweat:  
ça fait la meme chose que chez moi ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++ débutant] Du texte en couleur dans la console ?

 

Sujets relatifs
couleur de texte dans <option></otpion> de <select>VBA - ACCESS Fichier texte de plus de 20 000 lignes
[C++ débutant] Génération d'instances dynamique (?)[débutant inside] probleme lors de la construction d'un jeu de cartes.
Textarea et texte externe j'y arrive tjs pas aidez moi svpLisibilité dans la console
[C++ débutant] Tester si un Objet est d'un type précis ?[Resolu]Jeux2D besoin d aide couleur de transparence
[debutant C++] [Urgent] Tableau 2D nombre de colonne inconnu 
Plus de sujets relatifs à : [C++ débutant] Du texte en couleur dans la console ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR