6
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:
#include <iostream>
#include <windows.h>
#include <string>
#include <stdlib.h>
using namespace std;
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:
void TegnFarveStreng(string Tekst, int X, int Y, WORD farve)
{
HANDLE UdHandle; //Lav en handle som giver os tilladelse til at skrive
COORD position = {X, Y}; //Lav et koordinatsetup
UdHandle = GetStdHandle(STD_OUTPUT_HANDLE); //Skaf en UD-handle til skærmen
SetConsoleTextAttribute(UdHandle, farve); //Indstil konsol
SetConsoleCursorPosition(UdHandle, position); //Indstil vores skriveposition
cout << Tekst;
}
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():
int main()
{
TegnFarveStreng("En test af vores farve-funktion", 0, 0, FOREGROUND_BLUE);
Sleep(5000);
}
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:
#include <iostream>
#include <windows.h>
#include <string>
#include <stdlib.h>
using namespace std;
void TegnFarveStreng(string Tekst, int X, int Y, WORD farve)
{
HANDLE UdHandle; //Lav en handle som giver os tilladelse til at skrive
COORD position = {X, Y}; //Lav et koordinatsetup
UdHandle = GetStdHandle(STD_OUTPUT_HANDLE); //Skaf en UD-handle til skærmen
SetConsoleTextAttribute(UdHandle, farve); //Indstil konsol
SetConsoleCursorPosition(UdHandle, position); //Indstil vores skriveposition
cout << Tekst;
}
int main() {
TegnFarveStreng("Hej alle på udvikleren.dk !!!!!! Håber i kunne bruge den her artikel :D :D :D ",0, 1, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | BACKGROUND_BLUE);
Sleep(5000);
};
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)
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
Det er jeg bare vant til - gammel vane
ALDRIG VOID MAIN!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dejig artikel. Noget jeg vil gøre nytte af når jeg keder mig
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.
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?
Endelig en som gider lave en nt artikel !!!!!!!!
dig kunne vi godt bruge nogle flere af !!!
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)
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.
til ZyXTeM:
hvorfor? du må lige begrunde den holdning da min lærer altid siger at man SKAL bruge void main()
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?
HAP du har ikke gjort noget forkert men "tekst;"
variablen er ikke erklæret!!!
og lidt andre fejl!
undskyld min fejl ser at den er erklæret sorry!!
Hvad fanden er i for nogle spassere??!? .. main! ingen exit-code! kun i gamle dage!!?! .. sjeeez! ..
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
Nice nok, Keep up the good work!
Fin artikkel!
Til Esben > Jeg kan hverken finde bibliotek eller vejledning på din side :-s
Hmm, hvis jeg skriver "void main()" så får jeg en fejl, jeg SKAL skrive "int main()" . Jeg bruger Dev-C++ ...
satanclaus > Aldeles ikke.
SetConsoleTextAttribute (handle, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
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.