The Best Geek Forum

Cambiare colore alle stringhe in output C++

Hai bisogno di aiuto per il tuo codice?? Posta qui il tuo problema! Degli utenti specializzati provvederanno subito ad assisterti!

Moderatore: Moderatore in prova

Ciao, spero di non aver sbagliato sezione perdonatemi se ho sbagliato ma sono nuovo. Avrei un problema banale con il linguaggio c più nello specifico c++.
Il problema è il seguente: per cambiare colore alle frasi,parole ecc in un file compilato del c++, noi possiamo cliccare con il tasto destro del mouse sulla barra in alto dell'exe eseguibile andare su color e cambiare colore. Per cambiare colore ad una sola stringa e non a tutto il "file", usiamo una particolare stringa. Questa ha il difetto però di selezionare dello stesso colore le scritte successive anche quelle che vorremo far tornare di colore. Faccio un esempio pratico di un codice sorgente qui sotto.

Codice: Seleziona tutto

#include<windows.h>//necessario la libreria per il colore (API) o come lo volete chiamare voi
#include<iostream> //libreria opzionale
main()
{
printf("ciao \n"); //parola di output con colore normale
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //stringa che cambia il colore in verde
printf("colore verde \n"); //frase che effettivamente deve essere in verde
printf("Questa frase dovrebbe tornare di colore bianco come si potrebbe fare?"); //qui si presenta il problema 
printf("\n\n");
system("pause");
}
Sapendo che il c++ con questa stringa SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); è in grado di leggere solo i tre colori principali verde,rosso, e blue; come posso fare per far tornare il 3° printf di colore bianco o normale?
Grazie a tutti in anticipo. :thanks:
Virgula ha scritto:Ciao, spero di non aver sbagliato sezione perdonatemi se ho sbagliato ma sono nuovo. Avrei un problema banale con il linguaggio c più nello specifico c++.
Il problema è il seguente: per cambiare colore alle frasi,parole ecc in un file compilato del c++, noi possiamo cliccare con il tasto destro del mouse sulla barra in alto dell'exe eseguibile andare su color e cambiare colore. Per cambiare colore ad una sola stringa e non a tutto il "file", usiamo una particolare stringa. Questa ha il difetto però di selezionare dello stesso colore le scritte successive anche quelle che vorremo far tornare di colore. Faccio un esempio pratico di un codice sorgente qui sotto.


#include<windows.h>//necessario la libreria per il colore (API) o come lo volete chiamare voi
#include<iostream> //libreria opzionale
main()
{
printf("ciao \n"); //parola di output con colore normale
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //stringa che cambia il colore in verde
printf("colore verde \n"); //frase che effettivamente deve essere in verde
printf("Questa frase dovrebbe tornare di colore bianco come si potrebbe fare?"); //qui si presenta il problema
printf("\n\n");
system("pause");
}


Sapendo che il c++ con questa stringa SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); è in grado di leggere solo i tre colori principali verde,rosso, e blue; come posso fare per far tornare il 3° printf di colore bianco o normale?
Grazie a tutti in anticipo. :thanks:

Ciao dovresti rispettare il form per fare richiesta di aiuto:

http://tebigeek.com/viewtopic.php?f=43&t=358

Modifica il tuo post e poi potrò aiutarti ;)
Virgula ha scritto:Ciao, spero di non aver sbagliato sezione perdonatemi se ho sbagliato ma sono nuovo. Avrei un problema banale con il linguaggio c più nello specifico c++.
Il problema è il seguente: per cambiare colore alle frasi,parole ecc in un file compilato del c++, noi possiamo cliccare con il tasto destro del mouse sulla barra in alto dell'exe eseguibile andare su color e cambiare colore. Per cambiare colore ad una sola stringa e non a tutto il "file", usiamo una particolare stringa. Questa ha il difetto però di selezionare dello stesso colore le scritte successive anche quelle che vorremo far tornare di colore. Faccio un esempio pratico di un codice sorgente qui sotto.

Codice: Seleziona tutto

#include<windows.h>//necessario la libreria per il colore (API) o come lo volete chiamare voi
#include<iostream> //libreria opzionale
main()
{
printf("ciao \n"); //parola di output con colore normale
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //stringa che cambia il colore in verde
printf("colore verde \n"); //frase che effettivamente deve essere in verde
printf("Questa frase dovrebbe tornare di colore bianco come si potrebbe fare?"); //qui si presenta il problema 
printf("\n\n");
system("pause");
}
Sapendo che il c++ con questa stringa SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); è in grado di leggere solo i tre colori principali verde,rosso, e blue; come posso fare per far tornare il 3° printf di colore bianco o normale?
Grazie a tutti in anticipo. :thanks:

Ciao, prova a scrivere system("COLOR colore"); prima del tuo printf. Al posto di colore metti il colore di sfondo (background color) e il colore del testo.

system("COLOR E9");
printf("Ciao");

Ad esempio questo codice stamperà ciao in blu su sfondo giallo poichè E corrisponde al colore giallo e 9 al colore blu. Facendo variare questi due numeri ovviamente otterrai risultati differenti.
Ciao, prova a scrivere system("COLOR colore"); prima del tuo printf. Al posto di colore metti il colore di sfondo (background color) e il colore del testo.

system("COLOR E9");
printf("Ciao");

Ad esempio questo codice stamperà ciao in blu su sfondo giallo poichè E corrisponde al colore giallo e 9 al colore blu. Facendo variare questi due numeri ovviamente otterrai risultati differenti.
quello che hai scritto tu è giusto ma system("color EA"); ecc.. serve per cambiare colore a tutto l'output, mi spiego meglio

Codice: Seleziona tutto

#include<iostream>
#include<windows.h>
main()
{
system("COLOR E9");
printf("ciao \n");
system("COLOR A0");
printf("ancora ciao");
printf("\n\n");
system("pause");
}
l'output delle stringhe sarà tutto rosso in quanto solo uno dei system verrà letto... in poche parole potremmo ottenere lo stesso risultato anche semplicemente cambiando il colore dall'eseguibile .exe
Virgula ha scritto:
Ciao, prova a scrivere system("COLOR colore"); prima del tuo printf. Al posto di colore metti il colore di sfondo (background color) e il colore del testo.

system("COLOR E9");
printf("Ciao");

Ad esempio questo codice stamperà ciao in blu su sfondo giallo poichè E corrisponde al colore giallo e 9 al colore blu. Facendo variare questi due numeri ovviamente otterrai risultati differenti.
quello che hai scritto tu è giusto ma system("color EA"); ecc.. serve per cambiare colore a tutto l'output, mi spiego meglio

Codice: Seleziona tutto

#include<iostream>
#include<windows.h>
main()
{
system("COLOR E9");
printf("ciao \n");
system("COLOR A0");
printf("ancora ciao");
printf("\n\n");
system("pause");
}
l'output delle stringhe sarà tutto rosso in quanto solo uno dei system verrà letto... in poche parole potremmo ottenere lo stesso risultato anche semplicemente cambiando il colore dall'eseguibile .exe

Ahhhh allora fammi capire meglio, tu vuoi che una stringa sia stampata in un colore e poi in un altro? Cioè non vuoi interamente?
Ahhhh allora fammi capire meglio, tu vuoi che una stringa sia stampata in un colore e poi in un altro? Cioè non vuoi interamente?
Esatto. Però senza offesa, credo di essere stato abbastanza chiaro nella richiesta
Aggiungo anche le tabelle colori:

COLORI SCRITTE

Codice: Seleziona tutto

0 = nero
1 = blu scuro
2 = verde
3 = verde acqua 
4 = bordeaux
5 = viola
6 = verde oliva
7 = grigio chiaro 
8 = grigio
9 = blu
COLORI SFONDI

Codice: Seleziona tutto

A = verde limone
B = azzurro
C = rosso 
D = fucsia
E = giallo
F = bianco
Se invece vuoi far tornare il colore originale il comando è questo

Codice: Seleziona tutto

system("color F");

EDIT:
HO LETTO ORA CHE CI SONO STATI DEGLI SVILUPPI NELLA DISCUSSIONE (MENTRE IO SCRIVEVO IL POST QUI SOPRA); QUELLO CHE HO SCRITTO POTREBBE ESSERE INUTILE :lol: IN TAL CASO SIETE PREGATI DI SCUSARMI
Virgula ha scritto:
Ahhhh allora fammi capire meglio, tu vuoi che una stringa sia stampata in un colore e poi in un altro? Cioè non vuoi interamente?
Esatto. Però senza offesa, credo di essere stato abbastanza chiaro nella richiesta
Infatti sono io che non ho letto bene, sorry.


La risoluzione è semplice:

Esempio:


#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdOut==NULL)
{
cerr<<"Impossibile ottenere un handle alla console.";
return 1;
}
cout<<"Questo testo ha le impostazioni di default."<<endl;
cout<<"Anche questo, ma da qui in poi ";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED|FOR EGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_INTENSITY );
cout<<" tutto viene scritto in viola su sfondo verde chiaro."<<endl;
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED|FOR EGROUND_BLUE_|FOREGROUND_GREEN);
cout<<"Ora tutto e' normale."<<endl;
return 0;
}

Tieni conto che il colore viene specificato come combinazione di costanti rosso-verde-blu-intensità riferite a primo piano o a sfondo. Ad esempio per ottenere un giallo scuro in primo piano e un viola chiaro di sfondo dovrai specificare


FOREGROUND_RED|FOREGROUND_GREEN|BACKGROUND_RED|BAC KGROUND_BLUE|BACKGROUND_INTENSITY
dal momento che il giallo è la somma di rosso e verde e il viola chiaro è somma di rosso e blu e "intensità".


Ho risposto adeguatamente? Oppure no? Dimmi tu potrei aver sbagliato ancora :D
Infatti sono io che non ho letto bene, sorry.


La risoluzione è semplice:

Esempio:


#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdOut==NULL)
{
cerr<<"Impossibile ottenere un handle alla console.";
return 1;
}
cout<<"Questo testo ha le impostazioni di default."<<endl;
cout<<"Anche questo, ma da qui in poi ";
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED|FOR EGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_INTENSITY );
cout<<" tutto viene scritto in viola su sfondo verde chiaro."<<endl;
SetConsoleTextAttribute(hStdOut,FOREGROUND_RED|FOR EGROUND_BLUE_|FOREGROUND_GREEN);
cout<<"Ora tutto e' normale."<<endl;
return 0;
}

Tieni conto che il colore viene specificato come combinazione di costanti rosso-verde-blu-intensità riferite a primo piano o a sfondo. Ad esempio per ottenere un giallo scuro in primo piano e un viola chiaro di sfondo dovrai specificare


FOREGROUND_RED|FOREGROUND_GREEN|BACKGROUND_RED|BAC KGROUND_BLUE|BACKGROUND_INTENSITY
dal momento che il giallo è la somma di rosso e verde e il viola chiaro è somma di rosso e blu e "intensità".


Ho risposto adeguatamente? Oppure no? Dimmi tu potrei aver sbagliato ancora :D
no, ma anche prima avevi risposto bene il mio non era un rimprovero anzi, solo che system non centrava molto tutto qui. per quanto riguarda quello che mi hai scritto mi da degli errori ai FOR EGROUND_BLUE
però mi hai dato l'ispirazione: provo a mescolare i tre colori in modo da ottenere combinazioni diverse :D
Ok, questo è strano, che errori ti dà?