HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Több buffer terület használata egy konzol alkalmazáshoz


Konzol alkalmazások 4. rész

Példaprogram letöltése

4011 bájt

Ha elindítunk egy konzol alkalmazást, akkor lehetőségünk van több buffer területet használni a megjelenítéshez. Ennek előnye, hogy bármelyikről bármelyikre átkapcsolhatunk és azok tartalma e közben nem változik. E buffer területek és így a konzol ablakának mérete is különbözhet egymástól.
Nézzük miként is valósítható meg mindez.
begin
  b:=true;
Lesz egy FHandle1 nevű változónk, melyben tároljuk az elsődleges ablakunk azonosítóját.
  FHandle1:=GetStdHandle(STD_OUTPUT_HANDLE);
Az FHandleActive szintén egy THandle típusú változó, melybe mindig az aktív buffer terület azonosítója kerül.
  FHandleActive:=FHandle1;
Létrehozunk egy másodlagos buffert, a saját CreateSecondBuffer eljárásunkkal. Ez az FHandle2 változóban tárolja az azonosítóját, melyen keresztül hozzáférhetünk.
  CreateSecondBuffer;
A billentyűzet kezeléséhez szükségünk lesz a standard input elérésére.
  FInput:=GetStdHandle(STD_INPUT_HANDLE);
Ezt követően írunk az első ablakra szöveget.
  SetConsoleTextAttribute(FHandle1, 10);
  WriteLnToHandle(FHandle1, 'Switch: enter');
  WriteLnToHandle(FHandle1, 'Close: esc');
  WriteLnToHandle(FHandle1, '');
  WriteLnToHandle(FHandle1, 'Window: 1');
Majd írunk a második ablakra is szöveget.
  SetConsoleTextAttribute(FHandle2, 14);
  WriteLnToHandle(FHandle2, 'Switch: enter');
  WriteLnToHandle(FHandle2, 'Close: esc');
  WriteLnToHandle(FHandle2, '');
  WriteLnToHandle(FHandle2, 'Window: 2');
Végül egy ciklust kezdeményezünk, melyben figyeljük az Esc és Enter billentyűk lenyomását. Esc esetén befejezzük a program futását, míg Enter esetén a SwitchBuffer belső eljárásunk meghívásával átkapcsolunk a másik bufferre.
  while b do begin
    ReadConsoleInput(FInput, ir[0], 32, count);
    for i:=0 to count-1 do begin
      if ir[i].EventType=KEY_EVENT then begin
        with ir[i].Event.KeyEvent do begin
          if bKeyDown then begin
            case Ord(AsciiChar) of
              27: b:=false;
              13: SwitchBuffer;
…

Vizsgáljuk meg, miként is jön létre a másodlagos buffer.
  procedure CreateSecondBuffer;
  begin
Ehhez a CreateConsoleScreenBuffer függvényt kell meghívnunk.
    FHandle2:=CreateConsoleScreenBuffer(GENERIC_READ or GENERIC_WRITE, 0, nil,
        CONSOLE_TEXTMODE_BUFFER, nil);
A SetConsoleScreenBufferSize függvény hívásával lehet beállítani a buffer területét, vagyis hogy hányszor hány karakteres legyen.
    SetConsoleScreenBufferSize(FHandle2, coord);
A SetConsoleWindowInfo függvénnyel meghatározhatjuk, hogy a megjelenő konzol ablakban hányszor hány karakteres terület legyen látható. Ha a buffer nagyobb ennél, akkor a nem látható rész egy gördítő sáv segítségével érhető el.
    SetConsoleWindowInfo(FHandle2, true, rect);
  end;

Egyik bufferről átkapcsolni a másikra a SetConsoleActiveScreenBuffer függvénnyel tudunk. Használata egyszerű, csak meg kell adnunk annak a buffer-nek az azonosítóját, melyeket aktiválni szeretnénk.
  procedure SwitchBuffer;
  begin
    if FHandleActive=FHandle1 then begin
      SetConsoleActiveScreenBuffer(FHandle2);
      FHandleActive:=FHandle2;
    end else begin
      SetConsoleActiveScreenBuffer(FHandle1);
      FHandleActive:=FHandle1;
    end;
  end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3916WindowsA javascript nyelv bemutatása1. rész
3946WindowsJavascript változók és operátorok2. rész
3975WindowsKódvezérlés JScript-ben3. rész
4004WindowsFüggvények és objektumok4. rész
4036WindowsFejlett funkciók a JavaScript nyelvben5. rész
4066WindowsFejlett funkciók a JavaScript nyelvben - folytatás6. rész
4116WindowsReguláris kifejezések7. rész
4145WindowsReguláris kifejezések - folytatás8. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 645. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |