Az input buffer azonosítására fel kell vennünk egy THandle típusú változót. A konzol alkalmazásoknál két külön buffer van megjelenítésre és adatbevitelre.
FInput:=GetStdHandle(STD_INPUT_HANDLE);
A konzol ablak méretét állítsuk be az előző cikkben leírt módon.
Egy már meglévő karaktersorozat színét az alábbi függvénnyel módosíthatjuk.
c.X:=0; c.Y:=0;
FillConsoleOutputAttribute(FHandle,FOREGROUND_BLUE,65,c,i);
Az FHandle az output buffert azonosítja. A FOREGROUND_BLUE azt jelenti, hogy a betű színe kék lesz. A következő paraméter (65) a módosítandó karakterek számát határozza meg. A változtatás a c koordinátáktól kezdődik. A konzol ablak legelső koordinátája 0,0. A függvény az i paraméterben adja vissza a módosított karakterhelyek számát.
A FOREGROUND_BLUE helyén az alábbi szín konstansok szerepelhetnek.
| Konstans |
Jelentése |
| FOREGROUND_BLUE |
A betű színe kék. |
| FOREGROUND_GREEN |
A betű színe zöld. |
| FOREGROUND_RED |
A betű színe piros. |
| FOREGROUND_INTENSITY |
Erősíti a betű színét. |
| BACKGROUND_BLUE |
A háttér színe kék. |
| BACKGROUND_GREEN |
A háttér színe zöld. |
| BACKGROUND_RED |
A háttér színe piros. |
| BACKGROUND_INTENSITY |
Erősíti a háttér színét. |
A paraméter helyén számértékek használatával megadhatjuk a többi színt is.
A konzol ablak bármely részét felülírhatjuk az alábbi függvénnyel.
c.X:=0; c.Y:=1;
FillConsoleOutputCharacter(FHandle,'*',65,c,i);
Az FHandle itt is az output buffert azonosítja. A következő paraméter az a karakter, amelyet ki szeretnénk írni. A 65-ös paraméter érték azt jelenti, hogy a függvény a c koordinátájú karakterhelytől kezdődően 65 db *-ot rajzol ki. A módosított karakterhelyek számát az i változó kapja értékül.
Közvetlenül az input bufferbe a WriteConsoleInput függvénnyel írhatunk.
ir.Event.KeyEvent.AsciiChar:='X';
WriteConsoleInput(FInput,ir,10,i);
Egy elem beírásához az ir: _INPUT_RECORD struktúrát kell használnunk. A következő paraméter a beírandó elemek számát adja meg. Az i változó kapja értékül az aktuálisan beírt elemek számát.
Amikor a bufferba írunk, akkor annak tartalma nem jelenik meg a képernyőn. A buffer elemeinek számát a GetNumberOfConsoleInputEvents függvénnyel kérdezhetjük le.
GetNumberOfConsoleInputEvents(FInput,i);
Az elemek száma az i változóba kerül.
A bufferből egy karakter beolvasása ugyancsak az _INPUT_RECORD struktúra segítségével valósítható meg az alábbi függvénnyel.
ReadConsoleInput(FInput,ir,1,i);
FInput a buffert azonosítja, ir a struktúra, amely lehet tömb is. A harmadik paraméter a beolvasandó elemek száma. A ténylegesen beolvasásra kerülő elemek számát az i változó kapja értékül. A ReadConsoleInput a beolvasott elemeket törli a bufferből.
A buffer kiürítésére a FlushConsoleInputBuffer függvény szolgál.
FlushConsoleInputBuffer(FInput);