API Console -> Colorer du texte [RESOLU] - API Win32 - Programmation
Marsh Posté le 22-03-2010 à 11:27:35
Bonjour,
Pour le 1°, Modifies tu "txt.X++" car la position doit etre modifier en fonction du nombre de caractere je pense?
Pour le 2°, Regarde SetConsoleTextAttribute ( http://msdn.microsoft.comQ/en-us/l [...] 85%29.aspx )
Quand aux exemples: http://lmgtfy.com/?q=c%2B%2B+console+color
Marsh Posté le 22-03-2010 à 13:08:04
1) Je ne comprends pas bien ta question... j'ai sans doute mal exprimé la mienne. En fait cette fonction se présente comme ceci:
BOOL WINAPI WriteConsoleOutputAttribute(
__in HANDLE hConsoleOutput,
__in const WORD *lpAttribute,
__in DWORD nLength,
__in COORD dwWriteCoord,
__out LPDWORD lpNumberOfAttrsWritten
);
Avec nLength: The number of screen buffer character cells to which the attributes will be copied.
J'ai donc de bonnes raisons de penser qu'en positionnant txt.X et Y au début de ma chaine, et en indiquant le nombre de caractères de cette chaine en 3ème paramètre, tous les caractères prendront les attributs défini en second paramètre. En pratique,ça ne marche que pour le premier caractère, les suivant prenant des couleurs aléatoires. C'est pour ça que je fait la boucle présentée ci-dessus qui ne modifie qu'un caractère à la fois en incrémentant txt.X de 1 à chaque tour, jusqu'à la fin de la chaine.
Ce que je voudrais, c'est pouvoir me passer de cette boucle parce que la fonction se comportera normalement par rapport au paramètre nLenght.
2) Merci Non ce n'était pas si dur que ça, c'est juste que j'ai résolu déjà un tas de soucis mais que ma persévérance a des limites (que je tends à repousser), au bout d'un temps j'ai tendance à me reposer sur les autres...
Marsh Posté le 22-03-2010 à 15:06:06
Citation : si WriteConsoleOutputAttribute tenait ses promesses... où est mon problème |
Cette fonction tient ses promesse quand on l'utilise comme elle a été prévue. Si tu veux faire ça par groupe de len caractères a la fois, il faut faire:
WORD attr[len];
for (i = 0; i<len;i++) attr[i] = BACKGROUND_RED | FOREGROUND_GREEN;
etc.
Tes couleurs aléatoires, c'est justement ça: c'est parce que pour le deuxième caractère, dans ton code, la fonction va lire le WORD qui suit attr et l'interpréter comme une valeur d'attribut, etc.
WriteConsoleOutputAttribute est plutôt fait pour le cas ou les attributs varient d'un caractère au suivant, mais en fait, dans le cas qui t'intéresse, c'est FillConsoleOutputAttribute() que tu devrais employer je pense, qui propage un attribut unique à plusieurs caractères consécutifs.
A+,
Marsh Posté le 22-03-2010 à 16:28:51
haaaaaa c'était donc pour l'usage d'un vecteur le pointeur *lpAttribute! je m'étais effectivement demandé quel en était l'intérêt --' C'est donc ça que je n'avais pas saisi dans l'usage de cette fonction. Merci beaucoup à toi gilou, ainsi qu'à breizhbugs, j'ai toutes mes réponses et les idées un peu plus claires à présent.
Bonne fin de journée
Florimond
Marsh Posté le 21-03-2010 à 23:05:51
Bonjour,
Voilà un petit temps que je chipote en C avec l'API relative à la gestion de la console. Le temps commence à me manquer et je suis sur un problème apparemment simple mais dont je ne puis me sortir. Je voudrais pouvoir changer les attributs d'un bloc de caractères, et je voudrais pouvoir écrire pour la première fois un bloc de caractère directement dans une couleur précise.
Pour la première partie de mon problème, il y a WriteConsoleOutputAttribute. Mais cette fonction ne me permet de changer l'attribut que d'un caractère à la fois. En effet, quand je spécifie un nombre plus grand que 1 pour le 3ème paramètre, seul le premier caractère acquiert les caractéristiques demandées, les suivant prennent des couleurs aléatoires sans que je sache pourquoi. Je dois donc écrire une boucle comme celle-ci
Ok, ça fonctionne, mais ce serait mieux si WriteConsoleOutputAttribute tenait ses promesses... où est mon problème?
En ce qui concerne la seconde partie de mon problème, et bien je dois ne pas bien comprendre la msdn parce que je ne trouve pas de fonction qui me permette d'écrire simplement une série de caractères directement dans une couleur donnée. Est-ce que quelqu'un serait prêt à me montrer un exemple simple?
Je vous remercie d'avance
Florimond
Message édité par Florimondh le 22-03-2010 à 16:30:16