title image


Smiley Re: Menufarbe ändern
Hi



Ach - es ghet um die Console! Der Titel hattte mich abgeschreckt.



Die Befehle "cprintf" und "gotoxy" sind Compilerspezifisch. Du wirst dein Programm also vmtl. nicht mit einem anderen Compiler als TurboC compilieren können.



Du wirst nicht das ganze Menü neu malen müssen, aber zumindest den Teil, bei dem sich die Farbe ändert. Dazu könntest du speichern, in welcher Menüzeile du bist. Wenn eine hoch/runter-Taste gedrückt wird, wird die aktuelle Zeile ihn ihrer richtigen Farbe gemalt, DANN die Zeilen um 1 erhöht/verringert, und die neue Zeile in der "markierten" Farbe gemalt.



Hier mal was, was ich eben zum Testen geschrieben hatte - auch DORT werden noch Compilerspezifische Befehle verwendet (kbhit und getch werden aber von den meisten Compilern angeboten), aber wie du bisher die Eingabe gemacht hast, weiß ich ja nicht. Hier bewegt man die Markierung mit den Tasten 'q' und 'a' hoch und runter.





#include <windows.h>

#include <iostream>

#include <stdlib.h>

#include <conio.h>



using namespace std;



void gotoxy(int x, int y)

{

COORD coordScreen;

coordScreen.X = x;

coordScreen.Y = y;

SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), coordScreen);

}



void cls()

{

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

COORD coordScreen = { 0,0 };

DWORD cCharsWritten;

CONSOLE_SCREEN_BUFFER_INFO csbi;

DWORD dwConSize;

GetConsoleScreenBufferInfo(hConsole, &csbi);

dwConSize = csbi.dwSize.X * csbi.dwSize.Y;

FillConsoleOutputCharacter(hConsole, (TCHAR) ' ',

dwConSize, coordScreen, &cCharsWritten);

gotoxy(0,0);

return;

}





void setColor(int foreground, int background) {

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hConsole, foreground | background);

}





int main(int argc, char *argv[])

{

cls();



char menus[][40] = {

"Untermenu 1\n", "Untermenu 2\n", "Untermenu 3\n" };

int colors[] = { 1, 2, 4 };



for (int i=0; i<3; i++) {

gotoxy(0,i);

setColor(colors[i], 0);

printf("%s", menus[i]);

}



int row = 0;

gotoxy(0,row);

setColor(7, 0);

printf("%s", menus[row]);



char key = 0;

do {

while (!kbhit());

key = getch();



gotoxy(0,row);

setColor(colors[row], 0);

printf("%s", menus[row]);



if (key==27) break;



if (key=='q' && row>0) row--;

else if (key=='a' && row<2) row++;



gotoxy(0,row);

setColor(7, 0);

printf("%s", menus[row]);



}while(true);



system("PAUSE");

return 0;

}







bye



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: