Avatar billede romsen Nybegynder
07. april 2005 - 09:44 Der er 21 kommentarer og
1 løsning

Tekstfarve i DOS-console vindue

Hej...

Jeg skal have farve på min tekst i mit DOS-console vindue. Det skal gå uden om WIN32 API, for ellers plejer jeg at få nogle problemer i Win98 SE.

Jeg bruger compileren der hedder Dev-C++ v. 4.9.9.2.

Håber der er nogle der kan hjælpe!

MVH Romsen.
Avatar billede rbj_fp Nybegynder
07. april 2005 - 09:47 #1
En måde du kunne gøre det var ved at bruge ANSI.SYS, men det giver bare det problem at den skal være loaded for at få det til at virke:

http://www.computerhope.com/ansisys.htm
Avatar billede romsen Nybegynder
07. april 2005 - 09:50 #2
Ville helst bruge noget som ligger i C++!
Men tak alligevel... :O)
Avatar billede rbj_fp Nybegynder
07. april 2005 - 09:58 #3
Google'ede lige lidt og fandt: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=7939&lngWId=3

Her kan du download noget kode, som bruger farver i DOS og så skal du bare finde de funktioner og kopiere dem.
Avatar billede romsen Nybegynder
07. april 2005 - 10:38 #4
jeg har kigget på programmets kode, og det bruger stadig WIN32 API til at ændre tekstfarven!

Desværre! Men mange tak alligevel...
Avatar billede rbj_fp Nybegynder
07. april 2005 - 10:44 #5
ok..... desværre..
Avatar billede anders_h Novice
07. april 2005 - 13:20 #6
Hejsa,

der er en artikel om emnet her: http://www.udvikleren.dk/article.php?aid=154&techid=1

Hilsen Anders
Avatar billede anders_h Novice
07. april 2005 - 13:21 #7
Nå, sorry, så ikke at det skulle gå uden om Win32 API'et..
Avatar billede bertelbrander Novice
07. april 2005 - 19:42 #8
MinGW har mig bekendt ikke andre metoder en Win32 API'et til at lave faver i en konsol.
Cygwin (en anden gcc klon) har curses.

Hvilke problemer har du med Win32 Api funktionerne på 98 SE?
Avatar billede arne_v Ekspert
07. april 2005 - 23:02 #9
Avatar billede bertelbrander Novice
07. april 2005 - 23:22 #10
Mig bekendt bruge pdcurses Win32 API'et ...
Avatar billede romsen Nybegynder
08. april 2005 - 07:05 #11
Jeg har et billede af problemet her....

Ovre i højre side står teksten med grå, det begynder den på når man har skrevet mere end ca. 25 linier. (Altså der er 25 linier på skærmen!)

Hva kan det skyldes og hvordan kan det løses?? Hjælp!

http://img233.exs.cx/my.php?loc=img233&image=test7ab.png
Avatar billede arne_v Ekspert
08. april 2005 - 07:44 #12
Kan man skrive noget til windows som ikke bruger Win32 API ?

:-)
Avatar billede romsen Nybegynder
08. april 2005 - 07:50 #13
Det var det jeg håbede på at I ville hjælpe mig med! :O)

Det kan godt være jeg kan bruge Win32 API, men så ska jeg bare have hjælp til det, sådan at der ikke bliver udskrevet noget med grå skrift på skærmen!
Avatar billede arne_v Ekspert
08. april 2005 - 08:02 #14
skriver du det hele i en linie eller laver du absolut positionering ?
Avatar billede romsen Nybegynder
08. april 2005 - 08:41 #15
Nedenstående kode hører til dette billede...

http://img233.exs.cx/my.php?loc=img233&image=test7ab.png

Det må være udskrivning i en hel linie, for Windows laver automatisk linieskift!


*******************************************************
#include <windows.h>


char Buffer[3] = {'H', 'e', 'j'};
char Buffer2[7] = {'M', 'e', 'd', ' ', 'D', 'i', 'g'};

int i;
DWORD Dump;

int main(){

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
for(i = 0; i <= 5000; i++)
  {
  SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
  WriteConsole(hConsole, Buffer, 3, &Dump, 0);
  SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

  SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  WriteConsole(hConsole, Buffer2, 7, &Dump, 0);
  SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
  }

}
******************************************************************************
Avatar billede rbj_fp Nybegynder
08. april 2005 - 08:44 #16
Når du ud over de standard 80 character, for det kunne jo godt give et problem.

Bare lige en lille tanke...
Avatar billede arne_v Ekspert
08. april 2005 - 08:49 #17
Jep.

Min anbefaling vil klart være enten absolut positionering eller linie skift
efter 80 tegn.
Avatar billede romsen Nybegynder
08. april 2005 - 09:00 #18
hmmm...

Nu har jeg indsat linieskift i koden....

Her er et billede af resultatet... og der er stadig grå skrift!! Husk at det er Win98 SE....
Gør jeg noget forkert??
Problemet kommer når jeg når ud over de 25 linier...

Billedet...

http://img205.exs.cx/my.php?loc=img205&image=test1zn.png

og koden....

*******************************************
#include <windows.h>


char Buffer[5] = {'H', 'e', 'j', '\r', '\n'};
char Buffer2[9] = {'M', 'e', 'd', ' ', 'D', 'i', 'g', '\r', '\n'};

int i;
DWORD Dump;

int main(){

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
for(i = 0; i <= 5000; i++)
  {
  SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
  WriteConsole(hConsole, Buffer, 5, &Dump, 0);
  SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

  SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  WriteConsole(hConsole, Buffer2, 9, &Dump, 0);
  SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
  }

}
*****************************************************************************
Avatar billede bertelbrander Novice
09. april 2005 - 00:26 #19
Det ser ud til at du selv må scrolle på Win98.
Dette ser ud til at virke:

#include <windows.h>

char Buffer[5] = {'H', 'e', 'j'};
char Buffer2[9] = {'M', 'e', 'd', ' ', 'D', 'i', 'g'};

int i;
DWORD Dump;

int main()
{
  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

  CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo;
  GetConsoleScreenBufferInfo(hConsole, &ScreenBufferInfo);
  SMALL_RECT SourceRect;
  SourceRect.Left = 0;
  SourceRect.Top = 1;
  SourceRect.Right = ScreenBufferInfo.dwSize.X;
  SourceRect.Bottom = ScreenBufferInfo.dwSize.Y;
  COORD Dest = {0, 0};
  CHAR_INFO Fill;
  Fill.Char.AsciiChar = ' ';
  Fill.Attributes = 0;

  COORD Pos;
  Pos.X = 0;
  Pos.Y = ScreenBufferInfo.dwSize.Y - 1;
  SHORT Height = ScreenBufferInfo.dwSize.Y;
  for(i = 0; i <= 100; i++)
  {
      GetConsoleScreenBufferInfo(hConsole, &ScreenBufferInfo);
      if(ScreenBufferInfo.dwCursorPosition.Y + 1 >= Height)
      {
        ScrollConsoleScreenBuffer(hConsole, &SourceRect, 0, Dest, &Fill);
        SetConsoleCursorPosition(hConsole, Pos);
      }
      else
      {
        ScreenBufferInfo.dwCursorPosition.X = 0;
        ScreenBufferInfo.dwCursorPosition.Y++;
        SetConsoleCursorPosition(hConsole, ScreenBufferInfo.dwCursorPosition);
      }

      SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
      WriteConsole(hConsole, Buffer, 3, &Dump, 0);
      SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
      GetConsoleScreenBufferInfo(hConsole, &ScreenBufferInfo);
      if(ScreenBufferInfo.dwCursorPosition.Y + 1 >= Height)
      {
        ScrollConsoleScreenBuffer(hConsole, &SourceRect, 0, Dest, &Fill);
        SetConsoleCursorPosition(hConsole, Pos);
      }
      else
      {
        ScreenBufferInfo.dwCursorPosition.X = 0;
        ScreenBufferInfo.dwCursorPosition.Y++;
        SetConsoleCursorPosition(hConsole, ScreenBufferInfo.dwCursorPosition);
      }

      SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
      WriteConsole(hConsole, Buffer2, 7, &Dump, 0);
      SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
  }
}
Avatar billede romsen Nybegynder
11. april 2005 - 08:45 #20
Til bertelbrander:

Hey... det virker!!

:O)

Smid et svar så du kan få dine points!
Avatar billede bertelbrander Novice
12. april 2005 - 00:45 #21
Jeg samler ikke på point.
Avatar billede romsen Nybegynder
12. april 2005 - 11:00 #22
Okay... bare i orden.

Så lukker jeg spørgsmålet! :O)

Hygge
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



Seneste spørgsmål Seneste aktivitet
I går 17:10 Joomla artikler Af rmadsen80 i CMS-systemer
I går 16:54 Printervalg til kontor Af tumben i Printere
I går 15:08 Http client med X509Certificate2 Af joki i C#
I går 13:02 Hjemmenetværk Af Andfer i LAN/WAN
I går 11:17 Chrombook Af lurup i Andre styresystemer