|
![ein Kapitel weiter](../weiter.gif)
Jetzt wollen wir Attribute setzen. Folgende Funktionen stehen uns zur Verfügung...
int attroff(int attribut);
Ein Attribut das gesetzt wurde deaktivieren. z.B.:
attroff(A_BLINK);
Blinken eines Textes oder Zeichens.... deaktivieren.
int attron(int attribut);
Geeignet um zum Beispiel für einen String der schon ein Attribut bekommen hat ein weiteres zu aktivieren.
int attrset(int attribut);
Damit setzten wir jedes beliebige Attribut bzw. mehrere. z.B:
attrset(A_BOLD | A_BLINK);
printw("Dieser Text wird FETT und BLINKEND angezeigt");
Folgende Attribute können wir Verwenden :
Attribut |
Bedeutung |
A_NORMAL |
Normale Darstellung |
A_STANDOUT |
Zeichen stärkste Helligkeit |
A_UNDERLINE |
Zeichen unterstreichen |
A_REVERSE |
Invers |
A_BLINK |
blinken |
A_DIM |
Zeichen werden dunkler |
A_BOLD |
Fette Zeichen |
A_PROTECT |
Geschützter Modus |
A_INVIS |
Unsichtbar |
A_ALTCHARSET |
Umschalten auf Zeichengrafik |
A_CHARTEXT |
Macht aus dem 32Bit Wert (chtype) durch eine &-Verknüpfung einen 8Bit-Wert (ASCII) |
COLOR_PAIR(n) Setzt Farbenpaare zusammen (Hintergrund und Schrift)
Bevor wir überhaupt Farbe für ein Programm verwenden wollen müssen wir erst mal testen ob überhaupt Farben verfügbar sind....
bool has_colors();
Dies schreiben wir am besten...
if(has_colors==TRUE)
/*Wir haben Farbe*/
else
/*Wir haben keine Farbe*/
Ein weitere Abfrage wäre die Funktion....
bool can_change_colors(void);
Damit könne wir Abfragen ob wir die Farben vom Programm aus ändern können.
Falls wir Farbe haben (has_colors==TRUE) muss nach dem Aufruf von initscr() die Funktion....
int start_color(void);
aufgerufen werden. Mit start_color() initialisieren wir die Farben und gleichzeitig die globale Variablen COLORS und COLOR_PAIRS. COLOR_PAIRS stellt ein Farbenpaar dar aus Hintergrund und Schriftfarbe. Folgende Farben sind in der Headerdatei curses.h folgendermaßen definiert....
#define COLOR_BLACK 0
#define COLOR_RED 1
#define COLOR_GREEN 2
#define COLOR_YELLOW 3
#define COLOR_BLUE 4
#define COLOR_MAGENTA 5
#define COLOR_CYAN 6
#define COLOR_WHITE 7
int init_pair(short paarnummer, int zeichen, int hintergrund);
Mit init_pair() legen sie eine Paarnummerfest die sie dann mit attrset Ausgeben können. z.B.
init_pair(1,COLOR_RED,COLOR_GREEN); Damit legen wir ein Paar mit roter Schrift und grünen Hintergrund fest. Das Paar hat die Nummer 1. Dies setzten wir wie folgt ein....
attrset(COLOR_PAIR(1));
printfw("Dieser Text wird mit roten Zeichen auf grünen Hintergrund ausgegeben.");
...oder...
init_pair(2,COLOR_BLUE,COLOR_BLACK);
attrset(A_BOLD|COLOR_PAIR(2));
printw("Dieser Text wird mit fetter blauer Schrift "
"und schwarzem Hintergrund ausgegeben.");
Mit init_pair() können sie insgesamt 64 verschiedene Farbkombinationen festlegen.
Nur das Farbpaar mit dem Index 0 (COLOR_PAIR(0)) kann nie geändert werden. Dieser Wert entspricht weisen Text auf Schwarzen Hintergrund.
Um z.B. herauszufinden welche Farbe in einem Farbpaar definiert wurde gibt es die Funktion...
int pair_content(short paarnummer, short *zeichenfarbe, short *hintergrundfarbe);
Wozu soll das gut sein?
Nun es gibt eine Möglichkeiten alle Farbpaare auf einmal zu definieren...
int farbe1,farbe2,i=1;
if(has_color==TRUE)
{
start_color();
for(farbe1=COLOR_WHITE;farbe1>=COLOR_BLACK;farbe1--) //WHITE=7;BLACK=0
for(farbe2=COLOR_BLACK; farbe2<=COLOR_WHITE; farbe2++)
init_pair(i++,farbe1,farbe2);
}
Damit werden alle 64 Farbenpaare auf einmal definiert. Um jetzt wissen zu wollen welchen Farbwert das Paar 50 hat brauchen wir nur.....
pair_content(50,&zeichenfarbe,&hintergrundfarbe);
...an die Adressen der Variablen zeichenfarbe und hintergrundfarbe geben.
Jetzt wollen wir die Attribute und Farben auf unser Programm mit dem Raumschiff durchs Weltall loslassen.....
/*Download:cur11.c*/
#include <curses.h>
#include <stdlib.h>
/* 'q' */
#define QUIT 113
/* '<-' */
#define LEFT 260
/* -> */
#define RIGHT 261
int main()
{
int x=40,zufall, c,i,vor,hint;
srand(79);
initscr();
if(has_colors()==TRUE)
start_color();
else
exit (0);
keypad(stdscr,TRUE); /*Cursor und Funktionstasten*/
noecho(); /*keine Ausgabe*/
scrollok(stdscr,TRUE); /*Scrolling ein*/
scroll(stdscr);
init_pair(1,COLOR_YELLOW,COLOR_BLACK); /*Farbenpaar Nummer 1*/
init_pair(2,COLOR_CYAN,COLOR_CYAN); /*PaarNummer 2*/
init_pair(3,COLOR_GREEN,COLOR_BLACK); /*Farbenpaar Nummer 3*/
init_pair(4,COLOR_BLACK,COLOR_GREEN); /*Farbenpaar Nummer 4*/
while(c!=QUIT)
{
scrl(1); /*Eine Zeile runter scrollen*/
for(i=0;i<5;i++)
{
zufall=rand()%79;
attrset(A_DIM|COLOR_PAIR(1)); /*Sterne dunkel ausgegeben*/
mvaddch(20,zufall,'*');
attrset(A_UNDERLINE|A_BOLD|COLOR_PAIR(4)); /*Blinkend*/
mvprintw(0,0,"'q' drücken für Quit | Taste für Start | "
"<- nach links -> nach rechts");
}
c=getch();
halfdelay(3);
switch(c)
{
case LEFT : if(x<1) x=79;
else x--;
break;
case RIGHT: if(x>79) x=1;
else x++;
break;
default : break;
}
mvdelch(9,x+2);mvdelch(9,x+1);mvdelch(9,x);
mvdelch(9,x-1);mvdelch(9,x-2);
attrset(A_BOLD|COLOR_PAIR(2)); /*Raumschiff fette Schrift*/
mvaddch(10,x-1,ACS_LLCORNER);
mvaddch(10,x+1,ACS_LRCORNER);
attrset(A_BOLD|COLOR_PAIR(3));
mvaddch(10,x,ACS_TTEE);
} /*Ende while()*/
endwin();
return 0;
}
|
So siehts aus :
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|