Je me sers actuellement de la fonction setConsoleTextAttribute dans une application en mode console, pour modifier la couleur du texte affiche.
Cela fonctionne au premier abord, mais etrangement apres qq dizaines d'affichages, le comportement de la couleur du texte devient anormale, le couleur du texte n'est plus respectee et redevient grise.
Le code (bidon...) ci-dessous produit cet effet, sur au moins deux systemes (win98 et win NT4)
Mon analyse est la suivante : apparemment l'appel a SetConsoleTextAttribute semble avoir un effet limite aux caracteres dont les coordonnees ne sont pas hors des limites de la fenetre console initiale (typiquement 25*80 caracteres). Des que l'on affiche des caracteres supplementaires qui amenent a faire scroller le texte, l'effet de seConsoleTextAttribute s'evapore....
Quelqu'un pourrait-il m'expliquer ce phenomene, et comment le contourner pour pouvoir ecrire une application qui fait des sorties en couleur dans une console, sur des centaines de lignes successives ?
J'ai eu un problème similaire, par conséquent maintenant j'efface l'écran ou je remet le curseur en haut (cf une de mes sources (et la plus merdique -> gestion d'employés avec console + APIs ... ou un truc dans ce genre sur le site))
@+
Merci...mais ca confirme plutot mon intuition, pas moyen d'avoir une console avec des quantites de logs "qui defilent"
sur plusieurs ecrans, et une gestion des couleurs correcte :(
J'ai tente une immonde bidouille consistant a faire scroller l'ecran de la console d'une ligne avec un truc du genre printf("\n"), puis de faire l'appel a SetConsoleTextAttribute AVANT d'ecrire la ligne de texte en question, mais sans grand succes...
Je vais probablement me resoudre a ecrire une petite appli win32 en mode GUI pour arriver a mes fins.
Merci qd meme...
je vais continuer a chercher un workaround, tant qu'il me restera des cheveux :)
Rectification, apres verification ma bidouille fonctionne ! :
au lieu de faire :
setConsoleTextAttribute(...)
printf("texte a afficher\n");
il "suffit" de faire :
printf("\n");
setConsoleTextAttribute(...)
printf("texte a afficher");
et ca fonctionne dans tous les cas. Le premier "\n" fait scroller l'ecran d'une ligne si besoin, du coup le setConsoleTextAttribute qui s'ensuit agit sur la ligne nouvellement creee, et le printf final en beneficie...
C'est carrement tire par les cheveux, mais au moins ca marche, j'ai fini de galerer :)