| 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;
}


iruzkinik ez:
Argitaratu iruzkina