Farver i console

Tags:    c++
Skrevet af Bruger #4193 @ 18.08.2003
Man kan nogle gange blive lidt træt af ens konsolprogrammer.
De er kedelige at kigge på og ikke ret brugervenlige.

Men frygt ikke! Det er faktisk muligt at peppe sine konsolprogrammer op. Og det kræver ikke andet end 10 minutter!

Trin 1 (headers og namespace)


Lav et nyt C++ dokument. I toppen af det skal du skrive:

Fold kodeboks ind/udKode 


Nu har vi inkluderet den ISO-kompatible iostream (bemærk, uden .h), Windows-API'et, standard streng og standard library headerne, og sat vores standard-namespace op.


Trin 2 (skrive-funktion)



Nu vil vi lave en funktion til at skrive farvet tekst/baggrund med. Det gør vi ved at skrive:

Fold kodeboks ind/udKode 


Nu har vi så en funktion som vi kan bruge til at tekst uden at skulle gå igennem alle kommandoerne flere gange.


Trin 3 (anvendelse)



Nu skal vi så til at bruge den funktion som vi skabte i del 2.

Derfor redigerer vi i int main():

Fold kodeboks ind/udKode 


Prøv at kompilere det og køre! Du får en standard konsolskærm, men nu er teksten pludselig blå!

Du har kun 3 farver at vælge imellem (FOREGROUND_BLUE, FOREGROUND_RED og FOREGROUND_GREEN) men tilgengæld kan du blande dem.

Ligeledes kan du farve baggrunden med BACKGROUND_BLUE, BACKGROUND_RED og BACKGROUND_GREEN (og blandinger af disse)

Trin 4 (praktisk andvendelighed)



Hvis du vil lave en cin på samme linie som din farvede tekst er det også muligt. Du skal bare skrive cin >> [vaerdi] uden et \\n før.

Her er et lille eksempelprogram med blandede farver og baggrunde:

Fold kodeboks ind/udKode 


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (21)

User
Bruger #3499 @ 18.08.03 23:14
Der er nogen ting jeg er lidt uklar på. Hvorfor står der int main()? main skal aldrig returnere noget så hvorfor ikke void main() ?? ellers meget god artikel
User
Bruger #4193 @ 19.08.03 16:15
Det er jeg bare vant til - gammel vane :)
User
Bruger #4217 @ 19.08.03 22:07
ALDRIG VOID MAIN!!!!!!!!!!!!!!!!!!!!!!!!!!!!
User
Bruger #2520 @ 20.08.03 08:34
Dejig artikel. Noget jeg vil gøre nytte af når jeg keder mig :D
User
Bruger #123 @ 20.08.03 11:13
Til Mathias Joakobsen:
int Main() bruges traditionelt til at returnere en exit kode når programmet afsluttes. Denne exit kode kan så bruges til at se om programmet blev afsluttet korrekt, eller om der var fejl.

Jeg tror ikke man anvender den til noget som helst i dag, men i de "gammel" dage blev den altså brugt til at returnere en exit kode.

Udemærket artikel iøvrigt. Du kunne dog godt have forklaret lidt om HVORFOR man skal inkludere iostream, lidt baggrundsviden er aldrig at sige skidt til.
User
Bruger #2959 @ 20.08.03 18:36
Jeg synes det er en udmærket 'sjov' artikel.
Jeg vil bare gerne vide, hvordan man så kan få teksten til at blive almindelig igen?
Er der en funktion som kan nulstille kosol indstillingerne?
User
Bruger #4201 @ 23.08.03 22:12
Endelig en som gider lave en nt artikel !!!!!!!!
dig kunne vi godt bruge nogle flere af !!!
User
Bruger #693 @ 10.09.03 16:42
CHadi, du er nødt til, at gemme de originale indstillinger, for derefter at kunne stille det tilbage.

Check MSDN for GetConsoleScreenBufferInfo()..

og til forfatteren, når du nu bruger en standard header, hvorfor så ikke bruge flere? (cstdlib yo)
User
Bruger #693 @ 10.09.03 16:44
Der er btw ikke "kun" 3 forskellige farver ;)
Det er muligt at blande de forskellige farver, og tilføje FOREGROUND_INTENSITY, for en skarpere farve.
User
Bruger #3499 @ 11.09.03 10:56
til ZyXTeM:
hvorfor? du må lige begrunde den holdning da min lærer altid siger at man SKAL bruge void main()
User
Bruger #693 @ 11.09.03 16:16
Din lærer er en idiot.

void main() er langt fra standarden, og bør ikke bruges, læs evt. en kort gennemgang: http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044841143&id=1043284376
User
Bruger #2165 @ 15.09.03 15:25
Jeg ved ikke hvorfor, men jeg får en million fejl når jeg prøver at compile din kode???

Jeg har kopieret dit nederste eksempel ind i notebook og gemt filen som: "Function.cpp"... Så har jeg brugt DJGPP-compileren (som ikke har svigtet ind til videre) og compilet programmet.
Men det kunne den naturligvis ikke da den brokker sig over at meget af det er 'undeclared' fx: "FOREGROUND_RED undeclared"...

Hvad har jeg gjort forkert?
User
Bruger #3353 @ 04.10.03 02:27
HAP du har ikke gjort noget forkert men "tekst;"
variablen er ikke erklæret!!!
og lidt andre fejl!
User
Bruger #3353 @ 05.10.03 21:37
undskyld min fejl ser at den er erklæret sorry!!
User
Bruger #4327 @ 25.10.03 20:19
Hvad fanden er i for nogle spassere??!? .. main! ingen exit-code! kun i gamle dage!!?! .. sjeeez! ..
User
Bruger #5369 @ 02.03.04 09:44
Udemærket artikel, men rimeligt simpel. Min underviser på Århus Ingeniørhøjskole har lavet dette bibliotek, der giver de samme + lidt flere muligheder for farver og instillinger i en consol.
Biblioteket samt en vejledning kan hentes på http://www.giflen.dk
User
Bruger #5956 @ 18.07.04 21:18
Nice nok, Keep up the good work!
User
Bruger #7764 @ 19.07.05 14:40
Fin artikkel!

Til Esben > Jeg kan hverken finde bibliotek eller vejledning på din side :-s
User
Bruger #8985 @ 04.02.06 12:29
Hmm, hvis jeg skriver "void main()" så får jeg en fejl, jeg SKAL skrive "int main()" . Jeg bruger Dev-C++ ...
User
Bruger #8985 @ 30.01.07 12:13
satanclaus > Aldeles ikke.

SetConsoleTextAttribute (handle, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
User
Bruger #8985 @ 30.01.07 12:34
Liste over farver:

Rød: FOREGROUND_RED | FOREGROUND_INTENSITY
Gul: FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
Grøn: FOREGROUND_GREEN | FOREGROUND_INTENSITY
Blå: FOREGROUND_BLUE | FOREGROUND_INTENSITY
Hvid: FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
Turkis: FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
Grå: FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN
Lilla: FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY

Fjern FOREGROUND_INTENSITY for at få samme farve i mørk udgave :)
Du skal være logget ind for at skrive en kommentar.
t