W jaki sposób ustawić kolor tekstu oraz tła (odpowiedniki pascalowskich TextColor i TextBackground)

0

witam,
problem wydaje się banalny, ale nie mogę sobie z nim poradzić. na potrzeby projektu potrzebuje potrafić ustawiać kolor czcionki tekstu oraz tła tekstu wybranych fragmentów - nie całości. odpowiedniki pascalowskich funkcji TextBackGround i TextColor.

natrafiłem tutaj http://4programmers.net/Forum/C_i_C++/197717-kolory_w_konsoli_windows_dowolne_jezyk_polski_w_konsoli na takie coś:

SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_BLUE | FOREGROUND_RED );

ale nie trafiłem na lepszy opis tego niż to: http://cpp0x.pl/dokumentacja/WinAPI/SetConsoleTextAttribute/1039 z czego nie jestem w stanie zrozumieć jak to działa

tak więc jakby ktoś napisał jak tego używać byłbym wdzięczny. język C, win xp, dev c++

Pozdrawiam
Koszkaty

dodanie znacznika <code class="c"> + poprawienie tematu wątku - fp

0

ncurses, Borłand conio.h, WinApi szukać pod "console functions"

0

czytałem już o conio, ale niezbyt lepiej poszło

podczas kompilacji prostego programu - gotowiec

#include<stdio.h>
#include<conio.h>
 
main()
{
   textcolor(15);
   cprintf("C programming");
 
   getch();
   return 0;
}

wyskakuje błąd "c\Makefile.win recipe for target 'test.exe' failed" - na pogrubionej linijce makefile

Project: Projekt3

Makefile created by Dev-C++ 5.5.1

CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
OBJ = main.o
LINKOBJ = main.o
LIBS = -L"C:/Program Files/Dev-Cpp/MinGW32/lib" -L"C:/Program Files/Dev-Cpp/MinGW32/mingw32/lib" -static-libstdc++ -static-libgcc -std=c99
INCS = -I"C:/Program Files/Dev-Cpp/MinGW32/include"
CXXINCS = -I"C:/Program Files/Dev-Cpp/MinGW32/include" -I"C:/Program Files/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.7.2/include/c++"
BIN = test.exe
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
** $(CC) $(LINKOBJ) -o $(BIN) $(LIBS)

main.o: main.c
$(CC) -c main.c -o main.o $(CFLAGS)

nie miałem zielonego pojęcia o co tu chodzi, więc zacząłem szukać alternatywy - znalazłem owe SetConsoleTextAttribute któe mnie przerosło

co do tego linku http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs.85).aspx też już to przeglądałem, nie pomogło

0

poradziłem sobie jakos z tym

teraz tylko pytanie, czy jeżeli korzystam z różnych bibliotek - windows.h / conio.h itd - może spowodować, że pod linuxem mi to nie będzie działać?

0

czy jeżeli korzystam z różnych bibliotek - windows.h / conio.h itd - może spowodować, że pod linuxem mi to nie będzie działać?

Nie będzie działać.
windows.h jak nazwa wskazuje jest nagłówkiem wyłącznie windowsowym, a conio.h jest nagłówkiem typowo windowsowym, to jest mógłby istnieć pod linuksem, ale standardowo go nie ma.

Pod Linuksem do kolorów na konsoli można użyć sekwencji ANSI (zaczynających się od znaków o kodach 27 91), pełny wykaz tutaj.

To daje mniej możliwości niż ncurses, ale za to wypisujesz na standardowe wyjście.

0

jest jakaś uniwersalna metoda? raz napisane, będzie działać zarówno pod windowsem jak i lunuxem? tzn są biblioteki, z których korzystamy na obu platofrmach, nie? np stdio.h. Czy istnieje inna, "międzysystemowa" biblioteka, która będzie zawierała funkcje zbliżone do tych 2 funkcji o które pytam - TextColor oraz TextBackGround

3

Czy istnieje inna, "międzysystemowa" biblioteka, która będzie zawierała funkcje zbliżone do tych 2 funkcji o które pytam - TextColor oraz TextBackGround

Możesz sobie napisać:

void MyTextColor(coś, tam)
{
#ifdef WIN32
    TextColor(coś, tam);
#else
    printf("wstaw tutaj odpowiedni kod ANSI");
#endif
}
0

tak odswieze temat bo nie wiem czy wszystko rozumiem jeszcze

żeby taki program mi się skompilował pod linuxem - ten z tą procedurą co napisałeś - na początku daje

#ifdef WIN32
 #include <windows.h> //czy tam jak chce TextColor to conio.h ale mniejsza z tym
#endif

a teraz ANSI
znalazłem taką fajną stronkę: http://www.bluesock.org/~willg/dev/ansi.html
więc teraz zeby zmienic kolor pisze np cos takiego:

printf("\e[1;33m \e[0;42m TEST");

i teraz mam żółty tekst na zielonym tle? i jak długo to "obowiązuje", tzn jak dam niżej innego printf'a to dalej będą obowiązywały kolory które nadałem tutaj, czy kolory powrócą do domyślnych wartości?

0

Obowiązuje cały czas.
Czyli możesz zrobić

void ŻółtyNaZielonym()
{
    printf("\e[1;33m\e[0;42m");
}

a zamiast trywialnego pytania — testuj! w ciemno nie da się programować.

0

nic nie poradze na to, że póki co musze w ciemno robic, bo mam mocno ograniczony dostęp do linuxa. dopiero w przyszłym tygodniu będę mógł postawić wirtualke i wtedy będę mógł przetestować wszystko

w każdym razie dzięki wielkie za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1