2025(e)ko apirilaren 9(a), asteazkena

Ariketa 74 | Koloreak

ZER DAKIDAN:
Informazioa pantailan idazteko printf() funtzioa ezagutzen dut.



ZER IKASIKO DUDAN:
Informazioa koloretan pantailaratzen ikasiko dut SetConsoleTextAttribute() funtzioa erabiliz.

Ariketa 66 | Koloreak artilukuan ikusi zen kontsolan testu bat idaztean bere kolorea eta atributuak aukera daitezkeela. Artikulu honetan helburu bera beteko da, baina ANSI ihes-sekuentziak erabili ordez SetConsoleTextAttribute() funtzioari esker lortuko da. Kontsolako SetConsoleTextAttribute() funtzioa Windows© sistemetan soilik erabil daiteke.

Kolore bakoitzari zenbaki bat dagokio, baina erabilterrazago egitearren hitzezko konstante esanguratsuak defini daitezke, honela adibidez:

            #define BELTZA  0
            #define URDINA  1            // itsas urdina
            #define BERDEA  2
            #define ZYANA   3
            #define GORRIA  4
            #define MAGENTA 5            // morea
            #define HORIA   6            // urre kolorea
            #define ZURIA   7            // gris argia 
            #define BELTZ_DISTIRA    8   // gris iluna
            #define URDIN_DISTIRA    9
            #define BERDE_DISTIRA   10
            #define ZYAN_DISTIRA    11
            #define GORRI_DISTIRA   12
            #define MAGENTA_DISTIRA 13
            #define HORI_DISTIRA    14   // horia
            #define ZURI_DISTIRA    15   // zuri-zuria

Koloreak kontsolan 8 bitekin adierazten dira. Testu baten letrak eta testuaren hondoa aukera daitezke eta SetConsoleTextAttribute() funtzioari adierazi ahal zaio testua eta hondoa kolore desberdinez agerraztea, testurako 4 bit erabiltzen dira eta hondorako beste lau bit. Sintaxia holako zerbait izan daiteke:

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), iKolorea)

Non STD_OUTPUT_HANDLE ohiko kontsola izendatzen duen konstantea den eta iKolorea parametroa idazketaren kolorea den. Nahiz eta iKolorea parametroa bakarra izan, gorago aipatu den bezala, testuaren kolorea eta hondoaren kolorea zehatz daitezke. Hona hemen adibide bat:

       iKolorea = HORIA | URDINA << 4;   // koloreak lotzen dira:
                                         // testua HORIA (lehen 4 bitak) eta 
                                         // hondoa URDINA (hurrengo 4 bitak)
       SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), iKolorea);

Aurreko aginduak bete ondoren, hurrengo printf() funtzioen testuak kolore hori eta hondo urdin batean agertuko da. Ohiko koloretara itzultzeko (testua zuriz eta hondoa beltzez) agindua hau delarik:

       iKolorea = ZURIA;   // hondoa ez da adierazten
       SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), iKolorea);

Esate baterako, demagun hurrengo testuak agertu nahi ditugula pantailan:

Hauxe litzateke goiko irudiko testuak agerrarazteko kode zatia:

/* Ariketa-74_Koloreak: proiektuaren kodearen zati bat. */

    ...
    // Testua eta atzeko planoaren koloreak definitzeko
    int iTestuKolorea;
    int iHondoKolorea;
    int iKolorea;

    // LEHEN MEZUAREN IDAZKETA PRESTATU ETA IDATZI
    // Koloreak ezarri
    iTestuKolorea = MAGENTA_DISTIRA;  // More argia (testuaren kolorea)
    iHondoKolorea = BERDEA;           // Berdea (hondoaren kolorea)
    iKolorea = iTestuKolorea | iHondoKolorea << 4;  // Koloreak lotzen dira:
                                                    // iTestuKolorea (lehen 4 bitak) eta
                                                    // iHondoKolorea (hurrengo 4 bitak)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), iKolorea);
    // Testua inprimatu
    printf("   Testua MORE ARGIA eta hondoa BERDEA         \n");
    // Ohiko itxurako koloreak berreskuratu (testua zuriz eta atzeko planoa beltzez)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); // Ohiko kolorera itzuli

    // BIGARREN MEZUAREN IDAZKETA PRESTATU ETA IDATZI
    // Koloreak ezarri
    iTestuKolorea = URDINA;          // Itsas urdina (testuaren kolorea)
    iHondoKolorea = HORI_DISTIRA;    // Hori distiratsua (hondoaren kolorea)
    iKolorea = iTestuKolorea | iHondoKolorea << 4;   // Koloreak lotzen dira:
                                                     // iTestuKolorea (lehen 4 bitak) eta
                                                     // iHondoKolorea (hurrengo 4 bitak)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), iKolorea);
    // Testua inprimatu
    printf("   Testua URDINA eta hondoa HORI DISTIRATSUA   \n");
    // Ohiko itxurako koloreak berreskuratu (testua zuriz eta atzeko planoa beltzez)
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); // Ohiko kolorera itzuli

    // HIRUGARREN MEZUA IDATZI OHIKO KOLOREAK AUKERATURIK BAITAUDE
    printf("Testuaren ohiko kolorea...\n");
    ...


/* Ariketa-74_Koloreak: testuen koloreak SetConsoleTextAttribute() funtzioz. */


#include <stdio.h>
#include <windows.h>  // Windows-en koloreak aldatzeko funtzioak erabiltzeko

#define BELTZA  0
#define URDINA  1
#define BERDEA  2
#define ZYANA   3
#define GORRIA  4
#define MAGENTA 5
#define HORIA   6
#define ZURIA   7
#define BELTZ_DISTIRA    8
#define URDIN_DISTIRA    9
#define BERDE_DISTIRA   10
#define ZYAN_DISTIRA    11
#define GORRI_DISTIRA   12
#define MAGENTA_DISTIRA 13
#define HORI_DISTIRA    14
#define ZURI_DISTIRA    15


int HondoaAukeratu(void)
{
    int iKolorea;

    do
    {
        printf("===========================================\n");
        printf("                Koloreak\n");
        printf("===========================================\n");
        printf(" 0 BELTZA                  8 BELTZ ARGIA (gris iluna)\n");
        printf(" 1 URDINA (itsas urdina)   9 URDIN ARGIA\n");
        printf(" 2 BERDEA                 10 BERDE ARGIA\n");
        printf(" 3 ZYANA (urdin argia)    11 ZYAN ARGIA\n");
        printf(" 4 GORRIA                 12 GORRRI ARGIA\n");
        printf(" 5 MAGENTA (morea)        13 MAGENTA ARGIA\n");
        printf(" 6 HORIA (urre kolorea)   14 HORI ARGIA\n");
        printf(" 7 ZURIA (gris argia)     15 ZURI ARGIA (zuri-zuria)\n");
        printf("===========================================\n");
        printf(" Hondoa aukeratu: ");
        scanf("%d", &iKolorea);
    } while (iKolorea < 0 || iKolorea > 15);

    return iKolorea;
}


void TestuKoloreaEzarri(int iKolorea)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), iKolorea);
}


int main()
{
    // Testua eta atzeko planoaren koloreak definitzeko
    int iTestuKolorea;
    int iHondoKolorea;
    int iKont;
    int iHondoa;

    // Koloreak ezarri
    iTestuKolorea = ZURIA;          // Zuria (testuaren kolorea)
    iHondoKolorea = GORRI_DISTIRA;  // Gorri distiratsua (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua ZURIA eta hondoa GORRI DISTIRATSUA                 \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = ZURI_DISTIRA;   // Zuri-zuria (testuaren kolorea)
    iHondoKolorea = GORRIA;         // Gorria (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua ZURI DISTIRATSUA eta hondoa GORRIA                 \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = BELTZ_DISTIRA;  // Gris iluna (testuaren kolorea)
    iHondoKolorea = BERDE_DISTIRA;  // Berde distiratsua (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua BELTZ ARGIA (GRISA) eta hondoa BERDE DISTIRATSUA   \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = MAGENTA;        // Morea (testuaren kolorea)
    iHondoKolorea = BERDEA;         // Berdea (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua MAGENTA (MOREA) eta hondoa BERDEA                  \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = URDINA;         // Itsas urdina (testuaren kolorea)
    iHondoKolorea = HORI_DISTIRA;   // Hori distiratsua (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua URDINA eta hondoa HORI DISTIRATSUA                 \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = URDINA;         // Itsas urdina (testuaren kolorea)
    iHondoKolorea = HORIA;          // Hori iluna (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua URDINA eta hondoa HORIA                            \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = ZURI_DISTIRA;   // Zuri argia (testuaren kolorea)
    iHondoKolorea = URDINA;         // Urdina (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua ZURI DISTIRATSUA eta hondoa URDINA                 \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = HORI_DISTIRA;   // Hori argia (testuaren kolorea)
    iHondoKolorea = ZYAN_DISTIRA;   // Zyan argia (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua HORI ARGIZ eta hondoa ZYAN ARGIA                   \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = HORI_DISTIRA;   // Hori argia (testuaren kolorea)
    iHondoKolorea = ZYANA;          // Zyana (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua HORI ARGIZ eta hondoa ZYAN                         \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = BELTZA;         // Beltza (testuaren kolorea)
    iHondoKolorea = URDIN_DISTIRA;  // Urdin distiratsua (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua BELTZA eta hondoa URDIN DISTIRATSUA                \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = MAGENTA_DISTIRA;// Magenta argia (testuaren kolorea)
    iHondoKolorea = BELTZA;         // Beltza (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua MAGENTA ARGIZ eta hondoa BELTZA                    \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = BERDE_DISTIRA;  // Berde argia (testuaren kolorea)
    iHondoKolorea = BELTZ_DISTIRA;  // Beltz argia (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua BERDE ARGIZ eta hondoa BELTZ ARGIA (GRISA)         \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = GORRI_DISTIRA;  // Gorri argia (testuaren kolorea)
    iHondoKolorea = ZURIA;          // Zuria (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua GORRI ARGIZ eta hondoa ZURIZ                       \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    // Koloreak ezarri
    iTestuKolorea = GORRIA;         // Gorria (testuaren kolorea)
    iHondoKolorea = ZURI_DISTIRA;   // Zuri distiratsuaa (hondoaren kolorea)
    TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
    // Testua inprimatu
    printf("  Testua GORRIZ eta hondoa ZURI DISTITATSUZ                 \n");
    // Ohiko itxurako koloreak berreskuratu
    TestuKoloreaEzarri(7); // Kolore normalean (testua zuriz eta atzeko planoa beltzez)

    printf("\n");

    iHondoa = HondoaAukeratu();
    printf("\n\n");
    for (iKont = 0; iKont <= 15; iKont++)
    {
        printf("  %02d  ", iKont);
        // Koloreak ezarri
        iTestuKolorea = iKont;
        iHondoKolorea = iHondoa;
        TestuKoloreaEzarri(iTestuKolorea | iHondoKolorea << 4);  // Koloreak lotzen dira: iTestuKolorea (lehen 4 bitak) eta iHondoKolorea (hurrengo 4 bitak)
        // Testua inprimatu
        printf("  Testuaren kolorea = %02d  eta hondoa %d  ", iKont, iHondoa);
        // Ohiko itxurako koloreak berreskuratu
        TestuKoloreaEzarri(7); // Kolore normalean (zuriz testua eta beltzez atzeko planoa)
        printf("\n");
    }

    printf("\n\n");
    printf("Programa amaitzera doa");
    printf("\n\n");

    return 0;
}






  • Ariketa-74_Koloreak.cbp | main.c  


 

iruzkinik ez:

Argitaratu iruzkina