Program AblakProba;
  Uses NewDelay,Crt;
  {$i VRAM.inc}
  Type TAblak=Object
         bfx,bfy,jax,jay,
         kSzin,cSzin,hSzin,bSzin:Byte;
         cim:String;
         masolat:TKepernyo;
         cX,cY:Byte;
         Procedure Nyit(pbfx,pbfy,pjax,pjay,
                        pkSzin,pcSzin,phSzin,pbSzin:Byte;
                        pcim:String);
         Procedure Zar;
         Procedure SorIr(szoveg:String);
         Procedure LapozasraVar(szoveg:String);
         Procedure Torol;
       End;
  (*
       a TAblak objektum metodusainak definicioja:
  *)
       Procedure TAblak.Nyit(pbfx,pbfy,pjax,pjay,
                             pkSzin,pcSzin,phSzin,pbSzin:Byte;
                             pcim:String);
         Var s,o:Byte;
       Begin
         (*
            teljes kepernyomasolat letrehozasa:
         *)
         For s:=1 to MaxSor do for o:=1 to MaxOszlop do
         Begin
           masolat[s,o]:=Kep[s,o]
         End;
         (*
            attributumok kitoltese:
         *)
         bfx:=pbfx; bfy:=pbfy; jax:=pjax; jay:=pjay;
         kSzin:=pkSzin; cSzin:=pcSzin; hSzin:=phSzin; bSzin:=pbSzin;
         cim:=pcim;
         cX:=WhereX; cY:=WhereY;
         (*
            az ablak letrehozasa a kepernyon:
         *)
         Window(bfx,bfy,jax,jay);
         TextBackground(kSzin); ClrScr;
         TextColor(cSzin); Write(cim:((jax-bfx) Div 2)+(Length(cim) Div 2));
         Window(bfx+1,bfy+1,jax-1,jay-1);
         TextBackground(hSzin); ClrScr;
         TextColor(bSzin);
         cX:=WhereX; cY:=WhereY;
       End;

       Procedure TAblak.Zar;
         Var s,o:Byte;
       Begin
         (*
            teljes kepernyomasolat visszatoltese:
         *)
         For s:=1 to MaxSor do for o:=1 to MaxOszlop do
         Begin
           Kep[s,o]:=masolat[s,o]
         End;
       End;

       Procedure TAblak.SorIr(szoveg:String);
       Begin
         (*
           Ablak szin-, hely-, kurzor-allapot visszaallitas:
         *)
         Window(bfx+1,bfy+1,jax-1,jay-1); TextBackground(hSzin); TextColor(bSzin);
         GotoXY(cX,cY);
         (*
           Ha mar nem fer oda, akkor lapozasra varakozas:
         *)
         If WhereY+(Length(szoveg)+(jax-bfx-1)) Div (jax-bfx)>(jay-bfy-1) then
         Begin
           LapozasraVar('Betelt. Esc-re tovabb.');
           Torol;
         End;
         Writeln(szoveg);
         cX:=WhereX; cY:=WhereY;
       End;

       Procedure TAblak.LapozasraVar(szoveg:String);
         Const Esc=#27;
         Var   c:Char;
       Begin
         (*
           Also, keretbeli sorba iras,
           Esc-ig, veletlenszeruen valasztott szinnel:
         *)
         Window(bfx,jay,jax,jay); TextBackground(kSzin);
         c:=#0;
         Repeat
           TextColor(Random(16));
           GotoXY(((jax-bfx) Div 2)-(Length(szoveg) Div 2),1);
           Write(szoveg);
           Delay(100);
           If KeyPressed then c:=ReadKey;
         Until c=Esc;
         (*
           Alapallapot visszaallitas:
         *)
         TextBackground(kSzin); ClrScr;
         Window(bfx+1,bfy+1,jax-1,jay-1); TextBackground(hSzin); TextColor(bSzin);
       End;

       Procedure TAblak.Torol;
       Begin
         ClrScr;
         cX:=WhereX; cY:=WhereY;
       End;

  Var  a0,a1,a2:TAblak;
       c:Char;
       i:Integer;
       si:String;
Begin
  ClrScr;
  a0.Nyit(1,1,80,25,
          Red,Blue,White,Black,
          'Teljes k‚p');
  For i:=1 to 30 do {lapraferes probaja}
  Begin
    Str(i:71,si);
    a0.SorIr(si+'. sor.');
      {uj ablak rairas probaja:}
      a1.Nyit(Random(10)+10,Random(3)+5,70-Random(3),20-Random(3),
              Blue,White,Black,Red,
              'Bels“ k‚p');
      a1.SorIr('1. bels“ ablak:'+si+'.');
        {uj ablak rairas probaja:}
        a2.Nyit(Random(15)+1,Random(5)+8,74-Random(5),22-Random(5),
                Green,Red,Cyan,White,
                'Legbels“ k‚p');
        a2.SorIr('2. bels“ ablak:'+si+'.');
        If Random<0.1 then a2.LapozasraVar('Esc-re megyunk.');
        Delay(500);
        a2.Zar;
      If Random<0.1 then a1.LapozasraVar('Hadd menjunk!');
      Delay(500);
      a1.Zar;
  End;
  a0.LapozasraVar('Mehetunk?');
  a0.Zar;
End.