g_print() in Farbe ?



  • Hi !

    Jezt wo ich weiß wie ich unter Windows die Konsole abschalten kann, interresiert sie mich mehr denn je....

    Hab mich gefragt wie ich mit g_print farbige Ausgaben hinbekomme...

    Also ich denke mal das solche funktionen nicht mehr in der conio.h zu finden sind bzw, das sie sich überhaupt mit Gtk benutzen ließen...

    einen hinweis der mir über den weg gelaufen ist fand ich bei dem widget: "textview"

    Meine Frage ist schlicht und ergreifend: Ändere ich die Textfarbe in der Konsole genau so wie bei einem textview (noch nicht gemacht aber im reference manual gefunden)?!? Oder gibt es fertige Methoden wie z.B g_color("red"); oder sowas ?!?

    Schon mal Herzlichen Dank für die Antworten !

    Mfg McMorf



  • GTK+ ist ein GUI-Framework und nicht auf Konsolenanwendungen ausgelegt. Die GLib kann das meines Wissens leider auch nicht.
    Es gibt plattformübergreifende Bibliotheken dazu, aber ich würde mir einfach selber ein mcm_color() schreiben, das du auf das jeweilig benutzte System portierst.

    Am schicksten wäre, den string an g_print() mit automatischem Syntaxhighliting zu versehen.
    Mehr als Debugausgaben sollten sich darin hoffentlich nicht verstecken.

    im reference manual gefunden

    Wo?



  • Hi !

    Erst mal Herzlichen Dank für deine Antwort...
    Ich denke ich werde mir sowas für das jeweilige Betriebssystem selber zusammenschustern.
    Schade das sowas nicht auch noch in Gtk+ enthalten ist, aber man kann ja nicht alles vor die Füße gesezt bekommen...

    Zu der Frage bezüglich des Reference Manuals....
    Ich hoffe du hast mich da nicht falsch verstanden....
    Ich meinte für das text widget:

    http://library.gnome.org/devel/gtk/stable/TextWidget.html

    mfg McMorf



  • achso.... was ist denn das ? :

    "automatischem Syntaxhighliting"

    mfg McMorf



  • Hab ich mal vor etlichen jahren in der schule zusammengepfuscht und läuft...

    #ifndef _TEXTFARBE_H
    #define _TEXTFARBE_H
    
    #include <windows.h>
    #include <string.h>
    
    using namespace std;
    
    #define Black              "Black"    
    #define DarkBlue           "DarkBlue"   
    #define DarkGreen          "DarkGreen"  
    #define DarkCyan           "DarkCyan"   
    #define DarkRed            "DarkRed"   
    #define Violett            "Violett"   
    #define Brown              "Brown"   
    #define Gray               "Gray"   
    #define DarkGray           "DarkGray"
    #define Blue               "Blue"    
    #define Green              "Green"   
    #define Cyan               "Cyan"  
    #define Red                "Red"   
    #define Pink               "Pink"   
    #define Yellow             "Yellow"   
    #define White              "White"   
    
    typedef unsigned char COLOR;
    
    const COLOR _Black         = 0x0000;
    const COLOR _DarkBlue      = 0x0001;
    const COLOR _DarkGreen     = 0x0002;
    const COLOR _DarkCyan      = 0x0003;
    const COLOR _DarkRed       = 0x0004;
    const COLOR _Violett       = 0x0005;
    const COLOR _Brown         = 0x0006;
    const COLOR _Gray          = 0x0007;
    const COLOR _DarkGray      = 0x0008;
    const COLOR _Blue          = 0x0009;
    const COLOR _Green         = 0x000A;
    const COLOR _Cyan          = 0x000B;
    const COLOR _Red           = 0x000C;
    const COLOR _Pink          = 0x000D;
    const COLOR _Yellow        = 0x000E;
    const COLOR _White         = 0x000F;
    
    int Text__Back__Ground( unsigned char Color )
    {
        void *console_output = GetStdHandle( STD_OUTPUT_HANDLE );
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        GetConsoleScreenBufferInfo( console_output, &csbi );
        SetConsoleTextAttribute( console_output, ( ( csbi.wAttributes & 0xFF0F ) | ( Color << 4 ) ) );   
    }
    int Text__Force__Ground( unsigned char Color )
    {   
        void *console_output = GetStdHandle( STD_OUTPUT_HANDLE );
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        GetConsoleScreenBufferInfo( console_output, &csbi );
        SetConsoleTextAttribute( console_output, ( csbi.wAttributes & 0xFFF0 ) | Color );   
    }
    int TextColor(char Force_Ground[], char Back_Ground[])
    {
        if (strcmp (Force_Ground, Black)==0)Text__Force__Ground(_Black);
        if (strcmp (Force_Ground, DarkBlue)==0)Text__Force__Ground(_DarkBlue);
        if (strcmp (Force_Ground, DarkGreen)==0)Text__Force__Ground(_DarkGreen);
        if (strcmp (Force_Ground, DarkCyan)==0)Text__Force__Ground(_DarkCyan);
        if (strcmp (Force_Ground, DarkRed)==0)Text__Force__Ground(_DarkRed);
        if (strcmp (Force_Ground, Violett)==0)Text__Force__Ground(_Violett);
        if (strcmp (Force_Ground, Brown)==0)Text__Force__Ground(_Brown);
        if (strcmp (Force_Ground, Gray)==0)Text__Force__Ground(_Gray);
        if (strcmp (Force_Ground, DarkGray)==0)Text__Force__Ground(_DarkGray);
        if (strcmp (Force_Ground, Blue)==0)Text__Force__Ground(_Blue);
        if (strcmp (Force_Ground, Green)==0)Text__Force__Ground(_Green);
        if (strcmp (Force_Ground, Cyan)==0)Text__Force__Ground(_Cyan);
        if (strcmp (Force_Ground, Red)==0)Text__Force__Ground(_Red);
        if (strcmp (Force_Ground, Pink)==0)Text__Force__Ground(_Pink);
        if (strcmp (Force_Ground, Yellow)==0)Text__Force__Ground(_Yellow);
        if (strcmp (Force_Ground, White)==0)Text__Force__Ground(_White);
    
        if (strcmp (Back_Ground, Black)==0)Text__Back__Ground(_Black);
        if (strcmp (Back_Ground, DarkBlue)==0)Text__Back__Ground(_DarkBlue);
        if (strcmp (Back_Ground, DarkGreen)==0)Text__Back__Ground(_DarkGreen);
        if (strcmp (Back_Ground, DarkCyan)==0)Text__Back__Ground(_DarkCyan);
        if (strcmp (Back_Ground, DarkRed)==0)Text__Back__Ground(_DarkRed);
        if (strcmp (Back_Ground, Violett)==0)Text__Back__Ground(_Violett);
        if (strcmp (Back_Ground, Brown)==0)Text__Back__Ground(_Brown);
        if (strcmp (Back_Ground, Gray)==0)Text__Back__Ground(_Gray);
        if (strcmp (Back_Ground, DarkGray)==0)Text__Back__Ground(_DarkGray);
        if (strcmp (Back_Ground, Blue)==0)Text__Back__Ground(_Blue);
        if (strcmp (Back_Ground, Green)==0)Text__Back__Ground(_Green);
        if (strcmp (Back_Ground, Cyan)==0)Text__Back__Ground(_Cyan);
        if (strcmp (Back_Ground, Red)==0)Text__Back__Ground(_Red);
        if (strcmp (Back_Ground, Pink)==0)Text__Back__Ground(_Pink);
        if (strcmp (Back_Ground, Yellow)==0)Text__Back__Ground(_Yellow);
        if (strcmp (Back_Ground, White)==0)Text__Back__Ground(_White);
    }
    void cls(char Background[] )
    {
       char COLOR;
    
       if (strcmp (Background, Black    )==0)COLOR=_Black;   
       if (strcmp (Background, DarkBlue )==0)COLOR=_DarkBlue;
       if (strcmp (Background, DarkGreen)==0)COLOR=_DarkGreen;   
       if (strcmp (Background, DarkCyan )==0)COLOR=_DarkCyan;
       if (strcmp (Background, DarkRed  )==0)COLOR=_DarkRed;   
       if (strcmp (Background, Violett  )==0)COLOR=_Violett;
       if (strcmp (Background, Brown    )==0)COLOR=_Brown;   
       if (strcmp (Background, Gray     )==0)COLOR=_Gray;
       if (strcmp (Background, DarkGray )==0)COLOR=_DarkGray;   
       if (strcmp (Background, Blue     )==0)COLOR=_Red;
       if (strcmp (Background, Green    )==0)COLOR=_Green;   
       if (strcmp (Background, Cyan     )==0)COLOR=_Cyan;
       if (strcmp (Background, Red      )==0)COLOR=_Red;   
       if (strcmp (Background, Pink     )==0)COLOR=_Pink;
       if (strcmp (Background, Yellow   )==0)COLOR=_Yellow;   
       if (strcmp (Background, White    )==0)COLOR=_White;
    
       static const COORD upperleftcorner = {0, 0};
       CONSOLE_SCREEN_BUFFER_INFO screen_info;
       GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &screen_info);
    
       SMALL_RECT screensize;
       screensize.Left = 0;
       screensize.Top = 0;
       screensize.Right = screen_info.dwSize.X - 1;
       screensize.Bottom = screen_info.dwSize.Y - 1;
    
       _CHAR_INFO* buffer = new _CHAR_INFO[screen_info.dwSize.X * screen_info.dwSize.Y];
       _CHAR_INFO charinfo = {' ', COLOR << 4};
    
       for (int i = 0; i < screen_info.dwSize.X * screen_info.dwSize.Y; i++)
       {
          buffer[i] = charinfo;
       }
    
       COORD buffsize = {screen_info.dwSize.X, screen_info.dwSize.Y};
       WriteConsoleOutput(GetStdHandle(STD_OUTPUT_HANDLE),buffer,buffsize,upperleftcorner,&screensize);
    
       delete[] buffer;
    }
    
    #endif
    

    naja gut man könnte es um einiges schöhner machen, aber da war ich noch jung...

    und Programmierer sind ja bekanntlich Faul ^^

    Für Linux nehm ich dann ganz einfach nCurses.....

    Mfg McMorf



  • Hi !

    Ich habe herausgefunden, das es doch möglich ist die textfarbe der konsole direkt über GTK+ zu manipulieren...

    man muss nur einfach dem textbuffer von g_print tags zuweisen, mit denen man die farbe bestimmen kann quasie genau so wie beim textview....

    hehe währ witzig wenn das für schriftgröße u. Farbe auch ginge xD

    Mfg McMorf


Anmelden zum Antworten