SetConsoleTextAttribute : bug ?

Signaler
Messages postés
3
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
18 août 2003
-
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
-
Bonjour,

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)

for(int i=0 ; i < 25 ; i++)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN);

printf("This is a test\n");

Sleep(500);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |
FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |
FOREGROUND_RED | FOREGROUND_BLUE);

printf("This is a test\n");

Sleep(500);
}

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 ?

Merci d'avance !

5 réponses

Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
8-) Neodante 8-)

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))
@+
Messages postés
3
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
18 août 2003

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 :)

Bids
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
8-) Neodante 8-)

Bonne chance !!!!
@+
Messages postés
3
Date d'inscription
vendredi 15 août 2003
Statut
Membre
Dernière intervention
18 août 2003

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 :)

a+
Bids
Messages postés
2835
Date d'inscription
lundi 11 août 2003
Statut
Modérateur
Dernière intervention
16 décembre 2006
10
8-) Neodante 8-)

Au moins je mourrais moins bête ce soir !!!
@+ et merci pour la soluce !