Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Det jeg mente, var hvordan jeg kan ha tekst med forskjellige farger i program som jeg skriver selv i MS Visual C++. Jeg har lett etter C++-kodesnutter på internett, men har ikke funnet noe som virker enda.

 

Håper på svar.

Lenke til kommentar

Før måtte man laste ansi.sys for å kunne bruke farger i dos. Det er lenge siden men jeg husker jeg alltid lastet ansi.sys når jeg skulle lage bat-menyter og basic program med farger. Kan dessverre ikke si mer enn dette men du kan jo sjekke opp muligheten med ansi.sys kanskje?

Lenke til kommentar
De samme som i C :p

Jeg startet med C++, så jeg vet ikke hva C har å tilby.

 

Jeg har funnet flere biblotek/headere, men ingen av dem har ikke virket. Så derfor spør jeg her. Er det noen som vet om noen bibloteker/headere?

Endret av @b
Lenke til kommentar

For å få farger på teksten må du inkludere <windows.h>.

Lag så en ut-handle + en coord.. noe sånn som dette: (ikke testet)

#include <iostream>
#include <windows.h>
#include <conio.h> // for getch()
using namespace std;

COORD cursor;
HANDLE utHandle GetStdHandle(STD_OUTPUT_HANDLE);

int main()
{
SetConsoleTextAttribute(utHandle, BACKGROUND_GREEN | FOREGROUND_RED);
cout << "Hei på deg verden!\nTrykk en tast for å fortsette..." << endl;

getch();
return 0;
}

 

Du får google litt på SetConsoleTextAttribute - så tenker jeg du blir mer belært :)

Lenke til kommentar

assembly powah! :dribble: hehe det er jo bare til å putte assemblykode inn i C-programmet ditt og skrive rett til skjermbuffer da.

 

mulig dette funker kun i DOS, og at win ikke gir deg tilgang til skjermbuffer. uansett skal det være mulig på en eller annen måte gjennom asm :yes:

Lenke til kommentar
For å få farger på teksten må du inkludere <windows.h>.

Lag så en ut-handle + en coord.. noe sånn som dette: (ikke testet)

#include <iostream>
#include <windows.h>
#include <conio.h> // for getch()
using namespace std;

COORD cursor;
HANDLE utHandle GetStdHandle(STD_OUTPUT_HANDLE);

int main()
{
SetConsoleTextAttribute(utHandle, BACKGROUND_GREEN | FOREGROUND_RED);
cout << "Hei på deg verden!\nTrykk en tast for å fortsette..." << endl;

getch();
return 0;
}

 

Du får google litt på SetConsoleTextAttribute - så tenker jeg du blir mer belært :)

Feilmelding i MS Visual C++:

syntax error: missing ';' before identifier 'GetStdHandle'

 

Jeg har ikke kunnskaper nok til å fikse dette, har aldri brukt 'using namespace std;' før.

Lenke til kommentar

Trenger ikke COORD da, dette har jo med posisjonen til texten å gjøre, ikke noe med fargen.

Burde også ta en titt på GetConsoleScreenBufferInfo() for å kunne gjenopprette fargene som var :)

 

Denne bruker jeg:

void ColorString(std::string str, WORD color)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE stdHandle = GetStdHandle(STD_OUTPUT_HANDLE);

GetConsoleScreenBufferInfo(stdHandle, &csbiInfo);
SetConsoleTextAttribute(stdHandle, color);

std::cerr << str;

SetConsoleTextAttribute(stdHandle, csbiInfo.wAttributes);
}

WORD color kan være en blanding av (FOREGROUND | BACKGROUND)_(RED | BLUE | GREEN)

 

Error_X bruker en annen funksjon textcolor(), men jeg har ikke sett den noe sted.

Lenke til kommentar
heh, skulle AKKURAT til å edit'e inlegge mitt :p

 

Skrev koden etter at jeg hadde skrevet teksten.. hadde tenkt å vise noe litt kulere...

 

btw. hvorfor bruker du cerr?

dayslepers dårlige inflytelse antar jeg, følger min læremesters fotspor og tips slavisk.

Det er egentlig bare fordi jeg er slapp, selv om koden antakelig blir litt tregere av det.

Endret av Nazgul
Lenke til kommentar

Hvis du ikke har tenkt å endre fargen på teksten slik som f. eks som dette men ha fast bakgrunns/tekstfarge kan jo system("color XX"); være et alternativ.

 

C:\Documents and Settings\Jo Christian>color --help

Sets the default console foreground and background colors.

 

COLOR [attr]

 

  attr        Specifies color attribute of console output

 

Color attributes are specified by TWO hex digits -- the first

corresponds to the background; the second the foreground.  Each digit

can be any of the following values:

 

    0 = Black       8 = Gray

    1 = Blue        9 = Light Blue

    2 = Green       A = Light Green

    3 = Aqua        B = Light Aqua

    4 = Red         C = Light Red

    5 = Purple      D = Light Purple

    6 = Yellow      E = Light Yellow

    7 = White       F = Bright White

 

If no argument is given, this command restores the color to what it was

when CMD.EXE started.  This value either comes from the current console

window, the /T command line switch or from the DefaultColor registry

value.

 

The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute

the COLOR command with a foreground and background color that are the

same.

 

Example: "COLOR fc" produces light red on bright white.

:)

Endret av iCrap
Lenke til kommentar
Hvis du ikke har tenkt å endre fargen på teksten slik som f. eks som dette men ha fast bakgrunns/tekstfarge kan jo system("color XX"); være et alternativ.

Det var akkurat dette jeg tenkte på.

 

Og programmet må kunne kjøres i DOS i windows.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...