Aktuelle Farbe Speichern(Improved Console)



  • Also für mein Aktuelles Projekt habe ich mir ne Funktion gemacht die ein auffordert ne Taste zu drücken und unten rwechts inner Konsole einen Pfeil anzeigt...was jetzt noch fehlt ist:

    Die Aktuell genutzte Textfarbe soll gespeichert werden...der Pfeil in gelb ausgegeben werden und zum schluss die alte Textfarbe genutzt werden

    hier meine Funktion:

    void PUSHKEY()
    {    //HIER SOLL DIE AKTUELLE FARBE GESPEICHERT WERDEN
         textcolor(FG_YELLOW);
         gotoxy(75,23);cout <<"\37";
         cin.clear();
         cin.ignore(cin.rdbuf()->in_avail());
         cin.get();
         gotoxy(75,23);cout <<"\0";
         //UND HIER DIE ALTE WIEDER ZURÜCKGESTELLT WERDEN
    }
    

    Wie kann ich also die Aktuelle Farbe Speichern und zurücksetzen???Wäre Nett wenn mir jemand helfen könnte

    P.S.
    Und bitte jetzt nicht sagen FAQ oder so, weil die FAQ für die Farben lässt sich nicht aufrufen 🤡



  • Oke habe schon ein bissl wat rausgefunden:

    int tfs; //  TextFarbenSpeicher
    
    tfs = con.getTextColor();
    

    das speichert die Aktuelle Farbe in tfs...so aber wenn ich nun tfs als Farbwert für

    con.setTextColor();
    

    nutzen will kackt er ab...wie macht man des richtig

    P.s. Ich weiß, dass das mit:

    SetConsoleTextAttribute(Handle, Wert);
    

    in einer Funktion easy wär....aber hier wird Improved Console ja sehr empfohlen...ist das denn auch damit realisierbar?



  • Was meinst du mit "kackt er ab"? Das hier funktioniert bei mir ohne Probleme:

    #include <iostream>
    #include "ic.hpp"
    using namespace std;
    using namespace ic;
    
    int main ()
    {
    	TextColor oldTextColor = con.getTextColor();
    
    	con.setTextColor(FG_RED);
    	cout << "Hello World in Rot" << endl;
    
    	con.setTextColor(oldTextColor);
    	cout << "Hello World in der alten Farbe" << endl;
    
    	return 0;
    }
    

    Vielleicht ist dein "int" statt "TextColor" einfach falsch und er "kackt" gar nicht ab sondern du bekommst einen hübschen Compilerfehler 🙂

    MfG SideWinder



  • ja verdammt genau das isset *ISCH* *selbsthau*

    danke für die Hilfe 😋
    statt int,TextColor......

    hätte vielleicht mal nen genaueren Blick in die ic.hpp werfen sollen.

    auf jedenfall danke^^

    p.s. abkacken heißt bei mir eigentlich soviel wie:
    "Er kapiert nicht was ich meine und macht es nicht"^^



  • Ike nochmal...

    das selbe Problem. bloß diesmal ohne IC...

    das mit dem:

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FARBE);
    

    is ja kein ding...

    bloß wie lese ich die Aktuelle Farbe ein?...

    hab schon alles probiert. aber nichts klappt. selbst mit google habe ich nets gefunden.

    EDIT: Ich will das wissen, damit ich auch über IC hinaus komme^^....irgendwann mal



  • weiß den keiner eine Antwort?
    wäre echt super wenn mir das mal jmd erklären könnte

    oder ein beispiel gibt wie man das mit WinApi macht



  • Versuch's mal mit der Funktion GetConsoleScreenBufferInfo()



  • Ich bin nicht so der Pro...und darum klappt es wohl net so ganz...schaut selbst:

    CONSOLE_SCREEN_BUFFER_INFO getFarbe ()
    	{
            HANDLE hConsoleOutput;
    		CONSOLE_SCREEN_BUFFER_INFO Farbe;
    		GetConsoleScreenBufferInfo(hConsoleOutput,&Farbe);
    
    		return Farbe;
    	}
    
    		int getColor ()
    	{
    		return getFarbe().wAttributes;
    	}
    

    wenn ich jetzt das hier tue:

    int color;
    
        color = getColor();
    
        SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), color);
        cout << "test";
    

    ändert sich nichts...also wenn ich vorher
    die aktuelle Farbe einlese,
    dann eine neue aussuche,
    etwas ausgebe und
    dann die alte Farbe (wie da oben) wieder einlese

    ist trotzdem alles in der anderen Farbe

    EDIT:

    Habe das Problem gefunden...mache es nun wie folgt:

    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    
    GetConsoleScreenBufferInfo(hOutput,&csbi);
    
    cout << "FARBE GRAU";
    
    SetConsoleTextAttribute(hOutput, 12);
    
    cout << "FARBE ROT";
    
    SetConsoleTextAttribute(hOutput, csbi.wAttributes);
    
    cout << "FARBE WIEDER GRAU";
    

Anmelden zum Antworten