Avatar billede acid-head Nybegynder
21. november 2001 - 22:04 Der er 8 kommentarer og
1 løsning

Baggrundsfarve i MS-DOS?

<acidhead>

Hej eksperter... :)

- Jeg er ved at lave et lille bitte program til DOS, og så kunne jeg godt tænke mig hvordan man laver forkellige farver i DOS?

- Når jeg tænker på farver, tænker jeg på noget der f.eks. kunne lige scandisk i Windows 98, eller Windows 2000 installationen eller sådan noget...

- Håber sandelig i kan hjælpe mig... ;)
Avatar billede soepro Nybegynder
22. november 2001 - 08:14 #1
Du skal bruge funktionen textattr(int attr) som ligger i conio.h. attr indeholder både for- og baggrundsfarven på den måde at MSB er forgrund, LSB er baggrund. conio.h indeholder konstanter til de fleste farver:

BLACK
WHITE
GREY
BLUE
YELLOW
CYAN
MANGENTA
RED
GREEN
LIGHTGREEN
LIGHTGRAY
osv.

LIGHT???? farverne kan KUN anvendes i forgrund (du har 4 bit, dvs. 15 farver inkl. sort idet FF normal er BLINK), mens de 7 andre kan anvendes til baggrund også.

Eks. hvid på grøn baggrund, og sort på gul baggrund:

textattr((WHITE << 4) + GREEN);
textattr((BLACK << 4) + YELLOW);
Avatar billede acid-head Nybegynder
22. november 2001 - 22:58 #2
Jeg kan sQ ikke rigtig få det til at virke...

- Kan du ikke forklare lidt mere detaljeret hvordan man gør det? :) - Jeg er altså lige startet på C++... ;)
Avatar billede soepro Nybegynder
23. november 2001 - 09:48 #3
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <dos.h>

int main(void)
{
  int cVal, mVal = 50;

  clrscr();
  textattr((BLACK << 4) + YELLOW);
  for (cVal = 1; cVal <= mVal; cVal++)
  {
    delay(250); // Vent 1/4 sekund.
    gotoxy(1, 3);
    textattr((WHITE << 4) + BLACK);
    cprintf(\"%02d%%\", cVal/cMax);
    gotoxy(10+cVal, 3);
    textattr((BLUE << 4) + WHITE);
    putchar(\" \");
  };
  textattr((WHITE << 4) + BLACK);
  cputs(\"\\r\\n\\r\\n Så er jeg færdig.\");
  return 0;
}
Avatar billede soepro Nybegynder
23. november 2001 - 10:06 #4
Eller endnu bedre:

#include <conio.h>
#include <dos.h>

int main(void)
{
  int cVal, mVal = 50;

  clrscr();
  gotoxy(9, 3);
  textattr((LIGHTGRAY << 4) + BLACK);
  cprintf(\"%*.s\", mVal, \" \");

  for (cVal = 1; cVal <= mVal; cVal++)
  {
    delay(250); // Vent 1/4 sekund.
    gotoxy(5, 3);
    textattr((BLACK << 4) + WHITE);
    cprintf(\"%02d%% \", (cVal*100)/mVal);
    gotoxy(8+cVal, 3);
    textattr((BLUE << 4) + WHITE);
    putch(\' \');
  };
  textattr((BLACK << 4) + WHITE);
  cputs(\"\\r\\n\\r\\n Så er jeg færdig.\");
  return 0;
}

Programmet er compileret med TC++ 3.0.
Avatar billede acid-head Nybegynder
25. november 2001 - 01:29 #5
Jeg kan altså ikke rigtig få det til at virke...

- Jeg har prøvet at compile der i Visual C++ 6 og Bloodshed Dev-C++, men det virket ikke rigtig... ??
Avatar billede soepro Nybegynder
26. november 2001 - 08:48 #6
Under MVC (og C++ Builder for den sags skyld) skal du \"definere\" dit program som en \"Console application\", for at kunne bruge d.o. kode. Derudover skal du tilføje \'getch();\' lige inden \'return 0\', ellers kan du -muligvis- ikke nå at se kørslen.

\'delay()\' funktionen er heller ikke nødvendigvis \"kendt\" af MVC, så måske skal du lave følgende macro også:

#define delay(x) Sleep(x)

som laver delay(250) om til Sleep(250). Hvis det ikke virker, må du være mere specifik med hvilken fejl du får.
Avatar billede acid-head Nybegynder
26. november 2001 - 13:54 #7
Hej igen...

- Jeg får 8 \"undeclared identifier\"-fejl...

- De 8 stk. jeg får er:

clrscr, gotoxy, textattr, LIGHTGRAY, BLACK, Sleep, WHITE, BLUE

- Hvis du vil vide det også, så ser min kode nu sådan her ud:

#include <conio.h>
#include <dos.h>

#define delay(x) Sleep(x)

int main(void)
{
   
  int cVal, mVal = 50;

  clrscr();
  gotoxy(9, 3);
  textattr((LIGHTGRAY << 4) + BLACK);
  cprintf(\"%*.s\", mVal, \" \");

  for (cVal = 1; cVal <= mVal; cVal++)
  {
    delay(250); // Vent 1/4 sekund.
    gotoxy(5, 3);
    textattr((BLACK << 4) + WHITE);
    cprintf(\"%02d%% \", (cVal*100)/mVal);
    gotoxy(8+cVal, 3);
    textattr((BLUE << 4) + WHITE);
    putch(\' \');
  };
  textattr((BLACK << 4) + WHITE);
  cputs(\"\\r\\n\\r\\n Så er jeg færdig.\");
  getch();
  return 0;
}
Avatar billede acid-head Nybegynder
02. december 2001 - 18:17 #8
Jeg føler ligesom at folk har \"glemt\" mit spørgsmål... Så jeg lukker det bare nu...

- Du skal nok få de 12 point, selvom jeg aldrig fik det til at virke.. Du har jo trodsalt brugt tid på det... :)
Avatar billede soepro Nybegynder
03. december 2001 - 10:31 #9
De 7 af dine fejl, er funktioner som ligger i conio.h Dette får mig til endnu en gang at understrege at du skal starte \'Console Wizard\' for at kunne anvende funktionerne korrekt. Under C++ Builder er funktionen Sleep ikke tilgængelig for console-applications, der skal man bruge delay i stedet for.

P.S. Tak for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester