Delphi - Konzol alkalmazások készítése Delphi-vel

Konzol alkalmazások 1. rész

forráskód letöltése
Új cikksorozatunkban a Delphi-vel készíthető konzol alkalmazások lehetőségeit vesszük sorra. Így például megnézzük, miként használhatunk színes karaktereket a konzol ablakban, hogyan lehet felhasználói inputot kezelni, adatokat írni az ablakra, vagy beállítani a magyar kódlapot, hogy minden ékezetes betű rendesen jelenjen meg. Megvizsgáljuk azt is, hogy miként használhatunk egy konzol ablakhoz több buffert, ennek előnye az lesz, hogy bármelyik buffert aktivizálhatjuk úgy, hogy a többin lévő adat nem veszik el, így azokat nem kell újra kiírni csak átváltani az egyikről a másikra. Az első részben megnézzük, miként tudunk adatot írni a konzol ablakba, hogyan válthatunk kódlapot és az ablak fejléc szövegét miként határozhatjuk meg.

Konzol alkalmazás készítéséhez válasszuk a File - New menüpontot, majd a Console Application elemet.

Az ablakba történő írásra többféle lehetőség is nyílik. Az egyikhez szükségünk lesz egy azonosítóra (THandle), melyet a GetStdHandle függvénnyel kérhetünk le. Paraméterként a STD_OUTPUT_HANDLE konstanst használjuk, hogy megkapjuk az alapértelmezett kimeneti csatorna azonosítóját.
begin
  FI:=0;
  FHandle:=GetStdHandle(STD_OUTPUT_HANDLE);
Kódlap váltásra a SetConsoleOutputCP függvény alkalmas. Paraméterként a kívánt kódlap számát kell megadnunk. Ettől kezdve a kimeneti adatok a megadott kódlapon lesznek értelmezve. A Windows regisztrációs adatbázisának HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage címéről megtudhatjuk, hogy mely kódlapok választására nyílik lehetőségünk az adott rendszeren.
  SetConsoleOutputCP(852);
A SetConsoleTitle függvény paraméterében megadott sztring lesz az ablak fejléc szövege.
  SetConsoleTitle('Software Online (http://www.SoftwareOnline.hu)');
  while true do begin
    s:='ű '+IntToStr(FI);
Az alapértelmezett kimenetre küldhetünk adatot a Write, illetve a WriteLn függvényekkel. Az első csak a paraméterként megadott sztringet jeleníti meg, míg a második egy új sort is kezd.
    WriteLn(s);
Egy másik kiírási lehetőséget valósítunk meg, a saját WriteLn2 függvényünkben.
    WriteLn2(s);
    inc(FI);
    Sleep(250);
  end;
end.

A WriteLn2-ben a WriteConsole függvényt használjuk az adat kiírásához. Itt első paraméterben a már lekérdezett azonosítót kell megadnunk, mellyel azt tudatjuk a függvénnyel, hogy hova szeretnénk írni. A későbbiekben ennek még nagy hasznát vesszük. A második paraméterben adhatjuk meg a kiírandó sztringet, míg a harmadikban annak hosszát. A negyedik paraméterben kapjuk vissza, hogy ténylegesen hány karakter lett kiírva az átadott sztringből. Azt utolsó paraméter jelenleg nem használt.
procedure WriteLn2(s: string);
var
  count: DWORD;
begin
  s:=s+#13#10;
  WriteConsole(FHandle, PChar(s), Length(s), count, nil);
end;


Konzol alkalmazások cikksorozat