Farben



  • Hallo!
    Ich hab zwar schon in der FAQ geguckt, bin aber ein Programmieranfänger und verstehe das um ehrlich zu sein nicht ganz.
    Kann mir mal jemand erklären, wie ich in einem Konsolenprogramm die Schrift- und Hintergrundfarbe ändern kann?
    Kann man mir am besten ein Miniprogramm schreiben, wie z.B.: Hello World! Nur mit grünem Hintergrund und blauer Schrift, damit ich die zusammenhänge einmal komplett nachvollziehen kann.
    Mit dem SetColor was unter "improved ***" in der FAQ stand kann ich nämlich nix anfangen, ohne das einmal ganz in Aktion gesehen zu haben!!!
    PS: Ich verwende den MS Visual c++ 6.0 Compiler

    VIELEN DANK!

    Mfg Martin



  • hi,kannst ja mal bei google nach dem stichwort ansi escape sequenzen nachsehen. bin mir nicht sicher,obs mit vc++ geht. ich habs früher mal so gemacht. da kannst du text sowie texthintergrund ändern!!

    gruss



  • hi,da findet man nichts...ich schreib dir nachher ein programm,ok? so 17 uhr poste ichs!!(falls es kein anderer macht)ist aber eben ansi c

    gruss



  • Er will aber eigentlich Improved Console:

    #include "improvedconsole.h" // Da hast du den Code drinnen, den du downloaden kannst.
    
    int main ()
    {
        colcout.setcolor ( FOREGROUND_GREEN );
        colcout << "Hello World" << endl;
        return ( 0 );
    }
    

    MfG SideWinder



  • Hi!
    Danke erstmal soweit!!
    Wo krieg ich aber die improvedconsole.h her? Ich hab aus der FAQ die col_iostream.h runtergeladen und einfach umgenannt, weil ich dachte das diese gemeint wäre.
    Dann kommt aber immernoch die gleich Melding.

    Mfg Martin



  • Dann bindest du ebend die ein, es wahr so gedacht, dass man es besser lesen kann. 😉
    -> Muss natürlich im gleichen Ordner leigen! 😉



  • Mach ein neues Libary-Projekt.

    Kopiere die col_iostream.h und die col_iostream.cpp hinein. Die Header-Datei speicherst du dann ins Verzeichnis "%MSVC%\Include". Die Libary ins Verzeichnis "%MSVC%\Lib".

    In Projekten, in denen du die Improved Console verwendest musst du dann die Libary mitlinken!

    Danach sollte alles klappen.

    Dann kommt aber immernoch die gleich Melding.

    Die wäre...?

    MfG SideWinder



  • Es tut mir ja schon fast leid, aber ich verstehe das immer noch nicht ganz. Also die "improved.h" Header hab ich jetzt, aber wenn ich die benutze kommen solche Fehlermeldungen:

    Kompilierung läuft...
    Cpp1.cpp
    Linker-Vorgang läuft...
    Cpp1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall col_ostream::setcolor(unsigned short)" (?setcolor@col_ostream@@QAEXG@Z)
    Cpp1.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class col_ostream colcout" (?colcout@@3Vcol_ostream@@A)
    Debug/Cpp1.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Cpp1.exe - 3 Fehler, 0 Warnung(en)

    Ich hab bei dem Programm den Quelltext von Oben genommen und nur die Textausgabe ein wenig geändert.

    Vielleicht liegt das daran, dass ich diese .lib Datei nicht habe, ich weiß nämlich um ehrlich zu sein nicht wie ich so eine Datei mache und mit ein linke.

    Kann ja sein, dass ich mir damit einfach zu viel vorgenommen habe. Falls jemand den Eindruck hat, dass ich es so schnell nicht schaffe, brauchen sie sich keinen Stress mehr zu machen.
    Ich programmiere erst seit 5 Wochen und hab gedacht es wäre in Farbe mal ganz nett, aber das ist anscheinend für'n Anfang weniger geeignet!

    An dieser Stelle nochmal vielen Dank an Alle, die mir hier geholfen haben.

    MFG Martin



  • Nanana, das werden wir schon noch hinkriegen. Schritt für Schritt Lösung ist angesagt (musst dazusagen, dass du erst 5Wochen programmierst ;)):

    ----------------------------------------
    1. Erstellen der Libary:
    ----------------------------------------
    1.) MSVC (Microsoft Visual C/C++ 6.0) -> Datei -> Neu -> Projekt -> Win32-Bibliothek (statische)

    Rechts gibst du einen Namen ein (im folgenden als XXX bezeichnet).

    2.) Neu -> Dateien C/C++-Header-Datei

    Rechts gibst du einen Namen ein (im folgenden als YYY bezeichnet).

    In die Headerdatei kopierst du jetzt den Inhalt aus der <col_iostream.h>.

    3.) Neu -> Dateien C++-Quellcodedatei

    Rechts gibst du YYY als Namen ein.

    In die Quellcodedatei kopierst du jetzt den Inhalt aus der <col_iostream.cpp>.

    4.) F7 (Kompilieren & Erstellen).
    ----------------------------------------

    ----------------------------------------
    2. Kopieren der Libary in die MSVC-Verzeichnisse:
    ----------------------------------------
    1.) Du gehst in das Verzeichnis, in welchem du die Libary gespeichert hast. Du kopierst die Header-Datei in das Verzeichnis: %MSVC_INSTALLATIONSVERZEICHNIS%\Include und die Libary selber in das Verzeichnis: %MSVC_INSTALLATIONSVERZEICHNIS%\Lib

    Die Quellcodedatei wird nicht kopiert!
    ----------------------------------------

    ----------------------------------------
    3. Erstellen der Farb-Headerdatei
    ----------------------------------------
    1.) Neu -> Dateien -> C/C++-Headerdatei

    Rechts gibst du einen Namen ein (ZZZ). In die Datei kopierst du den Inhalt aus dem FAQ-Beitrag "Farben". Danach speicherst du es wieder im Include-Verzeichnis des MSVC-Verzeichnisses.
    ----------------------------------------
    4. Für jedes Projekt das die Improved Console verwendet:
    ----------------------------------------
    1.) Projekt erstellen, wie du es gewohnt bist.

    2.) Projekt -> Einstellungen -> Linker -> Objekt-/Bibliothek-Module

    Hier gibts du "XXX.lib" ein.

    3.) Du includierst die Headerdatei "YYY.h" und die Headerdatei "ZZZ.h".

    4.) Du verwendest statt "cout" in deinem Projekt "colcout". Mit "colcout.setcolor ( FARBE )" kannst du die einzelnen Farben wählen die du im FAQ-Beitrag "Farben" vorfindest.
    ----------------------------------------

    Bei Rückfragen oder Problemen melden :).

    MfG SideWinder



  • Unglaublich, es klappt!!
    Aber ein klitze kleines Problem hätte ich da noch. Kann man den schwarzen Hintergrund gar nich ändern. Wenn ich das mit
    setcolor( BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY )
    ändert sich ja nur der Hintergrund bei dem Wort. Ich habe gedacht, dass dieses setcolor vielleicht für die Textfarbe spezialisiert ist und für die ganze Hintergrundfarbe ein anderer Befehl.

    An dieser Stelle erst nochmal ein Danke an!!!!!!!!!!!

    mfg martin

    PS: Wie ich mitgekriegt habe, haben viele das Problem mit den Farben. Da ich denke, dass auch viele Anfänger wie ich dabei sind, die mit der FAQ nicht so viel anfangen können, denke ich das es sinnvoll wäre die (extrem gute) Schritt- für Schrittanleitung mit in die FAQ auf zu nehmen.



  • Ja, das hab ich mir auch schon überlegt -> nur dumm, dass sie rein auf den MSVC ausgelegt ist und Anfänger mit anderen Compilern damit wenig anfangen können - aber vielleicht gibts ja Leute die eine solche Schritt-Für-Schritt-Anleitung für andere Compiler basteln...

    Vordergrund und Hintergrund sind beide mit setcolor() umzustellen -> du musst nur FOREGROUND_XXX für den Vordergrund und BACKGROUND_XXX für den Hintergrund hernehmen. BTW: Es ist besser die Farben zu verwenden, die du in der FAQ unter "Farben" findest, dann musst du nicht soviel mischen sondern es reicht z.b. FG_BLACK für schwarzen Text zu übergeben ;).

    Den ganzen Hintergrund kannst du mit colcout.clrscr(FARBE) umstellen, allerdings ist der Bildschirm dann auch gelöscht. Den Bildschirm nicht zu löschen und trotzdem den ganzen Hintergrund zu ändern kann die Improved Console von Marcus leider nicht, und ich bastle erst an den Verbesserungen.

    Hier eine Funktion für das Ändern des kompletten Hintergrunds ohne die Zeichen zu ändern oder zu löschen:

    const bool setbackgroundcolor ( const DWORD dwColor )
    {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        const COORD c1 = { 0 , 0 };
        DWORD dw1 ( 0 );
        HANDLE hOutput ( GetStdHandle ( STD_OUTPUT_HANDLE ) );
    
        GetConsoleScreenBufferInfo ( hOutput , &csbi );
    
        DWORD dwLength = csbi.dwSize.X + 1 * csbi.dwSize.Y + 1;
    
        return (
            FillConsoleOutputAttribute ( hOutput , dwColor , dwLength , c1 , &dw1 ) && true
                );
    }
    

    Sollte sie nicht funktionieren, Fehler und/oder falsche Auswirkungen angeben!

    MfG SideWinder



  • Wenn ich die Funktion benutze kommte eine Fehlermeldung:

    --------------------Konfiguration: bunt - Win32 Debug--------------------
    Kompilierung läuft...
    bunt.cpp
    E:\Martin\bunt.cpp(11) : error C2601: 'setbackgroundcolor' : Lokale Funktionsdefinitionen sind unzulaessig
    Fehler beim Ausführen von cl.exe.

    bunt.exe - 1 Fehler, 0 Warnung(en)

    Na ja.
    Aber wenn man beim Text einfach immer die tab-Taste drückt, wird es ja auch in der Farbe. Das ist zwar kompliziert, aber es erfüllt den Zweck.

    Auf jeden Fall wurde mein Problem gelöst!
    Vielen Dank noch einmal!

    Mfg Martin



  • Zeig mal deinen Code her. Du hast nur die Funktion an den falschen Ort geschrieben. Ich zeig dir wo sie hingehört ;).

    MfG SideWinder



  • Die Schritt-Für-Schritt-Anleitung befindet sich jetzt im Thread "Improved Console" ebenfalls in der FAQ!

    MfG SideWinder



  • Hmm, da wurde ich mal wieder auf dem falschen Fuß erwischt.
    Bin gerade erst dabei Funktionen zu lernen. Ich weiß zwar, dass die Anweisungen ausführen und einen Wert zurückgeben, aber nicht wie man 2 Funktionen in einem Text hat und verbindet.
    Deshalb hab ich die Funktion oben einfach genommen wie sie ist und nur die Header Dateien zugefügt.
    Ich lese gleich nochmal ein bisl was, vielleicht kriege ich das dann noch raus;-)

    Mfg martin

    PS: Find ich ganz praktisch mit der FAQ



  • Sobald du dich im Thema Funktionen etwas sicherer bewegst, wirst du auch verstehen wo genau die Funktion setbackgroundcolor() hingehört ;).

    Viel Spaß beim Lernen!

    MfG SideWinder



  • Hi
    Danke Für die Hilfe ich habe mal alles probiert funktioniert auch soweit ganz gut nur der Background ist nur über die Hälfte des Konsolenfensters was nun??



  • Nur die Hälfte? Inwiefern:

    |****|      |**  |      |*** |
    |****| oder |**  | oder |*** |
    |    |      |**  |      |*** |
    |    |      |**  |      |    |
    

    Wäre mir sehr behilflich.

    MfG SideWinder



  • Hab zwar noch nicht alles gerafft mit den Funktionen, aber zumindest, dass ich sie nicht in die main () schreibe , aber in ihr aufrufen muss.
    Zumindest klappt es jetzt ohne Fehler.DANKE!
    Nochmal schnell ne allgemeine Frage, wenn es nicht stört. Muss ich alles was die Funktion machen soll in die Funktion schreiben und dann nur noch in der main aufrufen, oder kann ich in der main noch was zu der Funktion zu schreiben?
    Na ja, ich werde mich mal wieder in meinen Büchern vertiefen, hab noch was zu lernen...

    MFG martin



  • Nein, du kannst nichts mehr hinzuschreiben. Du musst den Code in die Funktion schreiben und in main brauchst du sie nur noch aufzurufen. Damit verhinderst du in erster Linie doppelten Code und kannst in zweiter Linie eine Funktion ändern ohne, dass du sie überall dort wo du sie aufgerufen hast ändern musst!

    #include <iostream>
    using namespace std;
    
    void funktion ();
    
    int main ()
    {
        cout << "Hier etwas Text:" << endl;
        funktion ();
        funktion ();
        return ( 0 );
    }
    
    void funktion ()
    {
        cout << "Hello World" << endl;
    }
    

    MfG SideWinder


Log in to reply