Delphi - Színek használata konzol alkalmazás feliratainál

Konzol alkalmazások 3. rész

forráskód letöltése

Konzol alkalmazás készítésekor arra is lehetőségünk van, hogy a megjelenítendő karakterek ne csak egy színnel jelenjenek meg, hanem egy általunk választott tetszőleges színnel. A megvalósítandó példában egy ciklus segítségével folyamatosan írunk ki számokat a konzol ablakba úgy, hogy minden számnak véletlenszerű színe legyen.

A színek kezelésénél tudnunk kell, hogy maximum csak 16 különböző áll rendelkezésünkre, tehát nem használhatunk RGB színeket. E 16 szín a három alapszínből (piros, zöld és kék) keverhető ki, melyhez hozzájön még egy intenzitás mértékét befolyásoló lehetőség. Adott ehhez négy konstans:
  FOREGROUND_BLUE = 1;
  FOREGROUND_GREEN = 2;
  FOREGROUND_RED = 4;
  FOREGROUND_INTENSITY = 8;
E négy konstans tetszőleges módon kombinálható egymással, így előállhat a 16 különböző szín. Piros esetén értelemszerű, hogy a FOREGROUND_RED konstans-t kell használnunk. Ha sárga színt szeretnénk, akkor az a FOREGROUND_RED + FOREGROUND_GREEN kombinációból kerül ki.

Az egyszerűbb kezelés kedvéért készítünk egy felsorolt típust, melyhez társítunk egy konstans tömböt:
type
  TConsoleColor=(ccRed, ccMaroon, ccLime, ccGreen, ccBlue, ccNavy, ccFuchsia, ccPurple, ccAqua,
      ccTeal, ccYellow, ccOlive, ccBlack, ccWhite, ccSilver, ccGray);

const
  CONSOLECOLOR: array[TConsoleColor] of DWORD=(
    FOREGROUND_RED or FOREGROUND_INTENSITY,
    FOREGROUND_RED,
    FOREGROUND_GREEN or FOREGROUND_INTENSITY,
    FOREGROUND_GREEN,
    FOREGROUND_BLUE or FOREGROUND_INTENSITY,
    FOREGROUND_BLUE,
    FOREGROUND_RED or FOREGROUND_BLUE or FOREGROUND_INTENSITY,
    FOREGROUND_RED or FOREGROUND_BLUE,
    FOREGROUND_GREEN or FOREGROUND_BLUE or FOREGROUND_INTENSITY,
    FOREGROUND_GREEN or FOREGROUND_BLUE,
    FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_INTENSITY,
    FOREGROUND_RED or FOREGROUND_GREEN,
    0,
    FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE or FOREGROUND_INTENSITY,
    FOREGROUND_RED or FOREGROUND_GREEN or FOREGROUND_BLUE,
    FOREGROUND_INTENSITY
  );

Ezek után egy-egy szín értékét már könnyedén meghatározhatjuk. Például sárga szín:
  CONSOLECOLOR[ccYellow]

Mielőtt adatot írnánk a konzol ablakba, állítsuk be az aktuális színt, melyhez a SetConsoleTextAttribute függvény hívása szükséges. Itt első paraméterként meg kell adnunk a szokásos azonosítót, melyet a GetStdHandle függvény ad. Másodikként pedig a szín értékét, mely 0 és 15 közötti szám esetén a betűszínt határozza meg.
  SetConsoleTextAttribute(FHandle, CONSOLECOLOR[ccLime]);
  WriteLn('Start');




Konzol alkalmazások cikksorozat