farbiger Text



  • Hallöchen alle,

    habe ein Programm, dass mir nach einem beliebigem Wort in einem String sucht.
    Jetzt wollte ich das Ergebnis etwas "verschönern" und mir, so denn er das Wort findet, den String nochmal anzeigen lassen und das gefundene Wort darin farbig(rot)darstellen lassen. Bis jetzt lass ich das Wort von >< markieren. Aber ein wenig Farbe wäre ganz nett.
    also bisher sieht das so aus in der Ausgabe:

    Suchwort: test
    String: abctestabc
    Ergebnis:
    Suchwort an der 4. Stelle beginnend gefunden.
    abc>test<abc

    Dieses "test" soll jetzt bitte rot sein 🙂
    Jetzt habe ich einen Post gefunden zu diesem Thema wo man
    die Function:
    BOOL SetConsoleTextAttribute(
    HANDLE hConsoleOutput, // handle to console screen buffer
    WORD wAttributes // text and background colors
    );
    ..benutzen kann.
    Das ist ja schön und gut nur kenne ich weder einen Datentyp "handle" noch weiss ich was da rein soll 😞
    Wäre nett wenn sich mal jmd erbarmt und mir erklären könnte wie diese Funktion zu verstehen ist und wie ich sie einsetzen kann. (in einem Beispiel evtl.)
    Ich verstehe nur soviel, dass die Funktion einen bool Wert zurückliefert.. Wozu?
    und was heist "handle to console screen buffer"
    Sorry, vielleicht bin ich ja zu blöd, aber die msdn ist für mich jedesmal ein Buch mit sieben Siegeln.



  • Hi, 🙂

    In der FAQ gibts einiges 😃
    http://www.c-plusplus.net/forum/viewtopic.php?t=39319

    Gruß,
    Patrick 🙂



  • öhm ja 😮
    Ein bissel viel Aufwand für mein gewünschtes Ergebnis, aber der Neugierde halber mahc ich mir mal den Spass und versau mir meine Entwicklungsumgebung 😃
    Dann bleibt nichtsdestotrotz die Frage wozu diese von mir oben gepostete Funktion gut ist bzw. wirft sich mir jetzt die stupide Frage auf ob C++ keine eigene Bibliothek hat in der Funktionen oder weiss der Teufel was definiert sind, die farbige Ausgaben ermöglichen?
    Ich meine.. hey. Gebt mir 10 Minuten und in Pascal hab ich das ganz schnell gemacht. Da ist soetwas, für mich, Elementares implementiert.



  • Man braucht dazu nicht unbedingt die Improved Console...

    Das geht auch folgendermaßen ;):

    #include <iostream>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
      HANDLE wnd = ::GetStdHandle(STD_OUTPUT_HANDLE); // Konsolenhandle
    
      // Gelb auf grünem Hintergrund
      SetConsoleTextAttribute(wnd, YELLOW | BACKGROUND_GREEN);
      cout << "moep." << endl;
    
      return 0;
    }
    

    Guckst du hier :).

    Falls Interesse besteht, habe mal `ne kleine Klasse geschrieben, mit der ein kleiner farbiger Programm-Header mit ausgerichtetem Text und sonstigem Konsolenhintergrund recht einfach is 🙂 (Nix tolles erwarten 🤡).



  • Gut, dass kann ich zumindest einbaun so dass es läuft 🙂
    Vorausgesetzt ich setze vor das YELLOW ein FOREGROUND_ und nehme statt dem YELLOW ein BLUE, RED oder INTENSITY.

    Nun passiert aber folgendes habe den Code einfach mal hinter mein Programm gesetzt und bin davon aus gegangen, dass er nur den nachfolgenden Text "färbt", also das "moep".
    Nix da, er setzt richtig eklig den gesamten "hintergrund", und zwar nur da wo ich was geschrieben habe, auf diese Farbe und den Text dementsprechend der anderen Farbe.
    Nnu möchte ich aber als Hintergrund schwarz beibelassen und als Textfarbe rot nehmen... und das auch nur für ein einziges Wort in einer Zeile.
    Also z.B.:

    asklfjadjkf test asdfadfg
    "test" soll rot erscheinen



  • hi

    nur so neben bei zu c++:

    dem standard ist farbige konsole egal.. genauso wie dem standard jede form von api (sprich zum bleistift die windowsprogrammierung.. mfc, oder sonstige zusätze) egal sind. diese betriebssystemabhängigen apis bringen gerne ihre farben selber mit.
    der standard ist pure grundlage. farben sind eben abhängig. linux macht sie anders als windows.. außer du fährst noch nen 98 oder 95 windows, da kannst du mit escapesequenzen arbeiten, aber alles drüber hat seine eigene idee.

    es gibt übrigens compiler, die farbe mit drin in der conio.h haben. da wäre u.a. der djgpp, da kannst du ganz einfach eine farbige konsole zaubern.
    mit dem visual studio und über win98 brauchst du eben die winapi. so wie oben beschrieben, bzw. in der faq.

    so long 🙂



  • @elise: jaaaa is ja gut, ich gebe mich geschlagen 🙂

    Ansonsten habe ich mal die IC "installiert" und das klappt fast perfekt.

    Die Farben habe ich unter farben.h abgespeichert.
    Benutze ich allerdings jetzt eine dieser vordefinierten Farben in Form von zB:
    colcout.setcolor(FG_BROWN | BG_WHITE);

    kommt sowohl für FG_BROWN al auch BG_WHITE oder sonstige Farben eine Fehlermeldung: ..nicht deklarierter Bezeichner
    schlagt mich, aber was mach ich falsch?

    so siehts oben aus 🙂

    #include <iostream>
    #include <string>
    #include <iomanip>
    #include <ic_header.h>
    #include <farben.h>
    using namespace std;
    

    so die Stelle wo ich es verwende:

    for (i= 0; i<apos-1;i++)
    			cout << text[i];
    		colcout.setcolor(FG_BROWN | BG_WHITE);
    		for (i=(apos-1);i<epos;i++)
    			colcout << text[i];
    

    die farben.h:

    namespace colors 
    { 
        // Vordergrundfarben ( Textfarben ): 
        const DWORD FG_BLACK ( 0 ); 
        const DWORD FG_BLUE ( FOREGROUND_BLUE | FOREGROUND_INTENSITY ); 
        const DWORD FG_BROWN ( FOREGROUND_RED | FOREGROUND_GREEN ); 
    .
    .
    .
    


  • Die Farben sind in einem eigenen Namespace "colors", also gehört das so:

    // Ohne Auflösung:
    colcout.setcolor(colors::FG_BROWN | colors::BG_WHITE);
    
    // Mit Auflösung:
    using namespace colors; // Am besten gleich nach using namespace std dann ist das übersichtlicher
    
    colcout.setcolor(FG_BROWN | BG_WHITE);
    

    MfG SideWinder



  • Da benutzt man "using namespace std" immer und dann krieg ich noch nicht mal gedanklich ne Brücke gebaut.. peinlich peinlicb
    Funzt jetzt natürlich danke vielmals 🙂



  • LOL!

    Das geht auch ohne Winapi!

    #include <conio.h>
    #include <iostream.h>
    #include <stdlib.h>
    
    int main()
    {
    textcolor(0);
    textbackground(7);
    cprintf(" So kann man das auch machen                                               TOBI!\r");
    
    textbackground(2);
    textcolor(1);
    
    cprintf("Und so auch...                                                                  \r\n");
    
    system("pause");
    return 0;
    }
    

    Kopiert es einfach mal, eineige Zeilen sind etwas lang, da sie im ganzen Konsolenfenster angezeigt werden!! 😃



  • Ach,

    Wenn du es Rot haben willst, dann mach's so:

    textcolor(4);
    textbackground(7);
    cprintf(" >> So sieht es aus, wenn es rot ist  <<                                   TOBI!\r\n");
    


  • Wie von elise bereits erwähnt funktioniert das nur mit manchen Compilern und eben nicht mit dem MSVC, außerdem ist der Thread hier schon einige Monate alt ob es da noch soviel Sinn hat hier reinzuposten?

    MfG SideWinder



  • blau grün und rot sind ja standard von windows.h oder?? wie kann ich dann einen ganz leichten programmcode schreiben der meinen ganzen text in der konsole grünn färbt?? (ohne #include fargeb.h)

    mfg Shark



  • danke, hat sich mitlerweile selbst erledigt!

    mfg Shark


Anmelden zum Antworten