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

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

Marsh Posté le 03-03-2006 à 01:43:06    

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
Reply

Marsh Posté le 03-03-2006 à 01:43:06   

Reply

Marsh Posté le 03-03-2006 à 08:50:54    

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

Reply

Marsh Posté le 03-03-2006 à 09:00:30    

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
Reply

Marsh Posté le 03-03-2006 à 09:00:45    

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
Reply

Marsh Posté le 03-03-2006 à 12:42:04    

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
Reply

Marsh Posté le 03-03-2006 à 13:44:26    

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...

Reply

Marsh Posté le 03-03-2006 à 13:50:49    

Reply

Marsh Posté le 03-03-2006 à 14:32:03    


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
Reply

Marsh Posté le 03-03-2006 à 21:11:22    


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
Reply

Marsh Posté le 03-03-2006 à 21:53:34    

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
Reply

Marsh Posté le 03-03-2006 à 21:53:34   

Reply

Marsh Posté le 03-03-2006 à 22:52:26    

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
Reply

Marsh Posté le 04-03-2006 à 12:12:05    

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
Reply

Marsh Posté le 04-03-2006 à 13:19:50    

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
Reply

Marsh Posté le 04-03-2006 à 14:12:31    

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!

Reply

Marsh Posté le 04-03-2006 à 14:20:30    

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
Reply

Marsh Posté le 04-03-2006 à 15:06:43    

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
Reply

Marsh Posté le 04-03-2006 à 15:27:27    

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
Reply

Marsh Posté le 04-03-2006 à 15:53:25    

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.  

Reply

Marsh Posté le 04-03-2006 à 15:55:27    

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

Reply

Marsh Posté le 04-03-2006 à 16:28:09    

++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
Reply

Marsh Posté le 04-03-2006 à 16:35:44    

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.
 

Reply

Marsh Posté le 04-03-2006 à 16:39:54    

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!

Reply

Marsh Posté le 04-03-2006 à 16:40:32    

++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
Reply

Marsh Posté le 04-03-2006 à 16:40:57    

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
Reply

Marsh Posté le 04-03-2006 à 16:45:06    

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
Reply

Marsh Posté le 04-03-2006 à 16:49:50    

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
Reply

Marsh Posté le 04-03-2006 à 18:20:00    

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)

Reply

Marsh Posté le 04-03-2006 à 18:28:05    

Reply

Marsh Posté le 04-03-2006 à 20:45:10    


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

Reply

Marsh Posté le 04-03-2006 à 20:47:49    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed