
Captulo 18 - outros recursos de tela

  Window - este procedimento faz parte da UNIT CRT, e nos permite definir
o tamanho til da tela. Quando definimos uma window, as coordenadas de refe-
rncia de linha e coluna ficam relativas  nova window e sempre o canto 
superior esquerdo da tela  a posio 1,1, estando os procedimentos de v-
deo tambm vinculados a esta nova janela. Sua sintaxe:
  WINDOW (<x1>, <y1>, <x2>, <y2> : BYTE);
  As coordenadas x1, y1, correspondem  coluna e linha superior esquerda,
respectivamente, e x2, y2,  coluna e linha do canto inferior direito. 
No caso de parmetros invlidos, o procedimento no  executado porm no
 enviada nenhuma mensagem de erro. Vejamos um exemplo:
PROGRAM teste_window;
USES CRT;
VAR  
  ind, col1, lin1,
  col2, lin2 : BYTE;
  ch : CHAR;
BEGIN
     REPEAT
       CLRSCR;
       WRITE (entre com a primeira colun);
       READLN (col1);
       WRITE (entre com a primeira linh);
       READLN (lin1);
       WRITE (entre com a ltima colun);
       READLN (col2);
       WRITE (entre com a ltima linh);
       READLN (lin2);
       CLRSCR;
       FOR ind := col1 TO col2 DO
         BEGIN
           GOTOXY (ind,lin1);
           WRITE (*);
           GOTOXY (ind,lin2);
           WRITE (*);
         END;
       FOR ind := lin2-1 DOWNTO liN1+1 DO
         BEGIN
           GOTOXY (col1,ind);
           WRITE (*);
           GOTOXY (col2,ind);
           WRITE (*);
         END;
       WINDOW (col1 + 1, lin1 + 1, col2 -1, lin2 -1);
       GOTOXY (col1,lin2-1);
       WRITE (pressione uma tecla para continuar);
       ch := READKEY;
       CLRSCR;
       FOR ind := 1 TO 100 DO
         WRITE (#);
         WINDOW (1,1,80,25);
         GOTOXY ((col1 + col2) DIV 2,
                 (lin1 + lin2) DIV 2);
         WRITELN (.ponto central desta janela );
         GOTOXY (1,25);
         WRITE (deseja nova janela S/N ??? );
         REPEAT
           ch := UPCASE (READKEY);
         UNTIL ch IN [S,N;
         UNTIL ch = N;
END.

   importante que se perceba que foram utilizadas como parmetros para o
comando WINDOW, as coordenadas para dentro da moldura desenhada, com isto
fazemos com que quando limparmos a tela, a moldura fique intacta.

CLREOL - este procedimento pertence a UNIT CRT e permite que se limpem
todos os caracteres da linha, (CLeaR End Of Line) a partir da posio do
cursor sem que seja alterada a posio corrente do cursor, e respeitando
ainda a janela ativa. Sua sintaxe:
  CLREOL;
  Incrementando o exemplo anterior com a utilizao de CLREOL, teremos:
PROGRAM teste_clreol;
USES CRT;
VAR
  ind, col1, lin1,
  col2, lin2 : BYTE;
  ch ; CHAR;
BEGIN
     REPEAT
       CLRSCR;
       GOTOXY (5,2);
       WRITE ('entre com a primeira coluna');
       REPEAT
         GOTOXY (33,2);
         CLREOL;
         READLN (col1);
       UNTIL (col1 > 0 ) AND (col1 < 80);
         GOTOXY (5,4);
         WRITE ('entre com a primeira linha');
         REPEAT
           GOTOXY (33,4);
           CLREOL;
           READLN (lin1);
         UNTIL (lin1 > 0) AND (lin1 < 24);
         GOTOXY (5,6);
         WRITE ('entre com a ltima coluna');
         REPEAT
           GOTOXY (33,6);
           CLREOL;
           READLN (col2);]
         UNTIL (col2 > col1) AND (col2 < 80);
           GOTOXY (5,8);
           WRITE (entre com a ltima linha );
           REPEAT
             GOTOXY (33,8);
             CLREOL;
             READLN (lin2);
           UNTIL (lin2 > lin1) AND (lin2 < 25);
             CLRSCR;
           FOR ind := col1 TO col2 DO
             BEGIN
               GOTOXY (ind, lin1);
            WRITE (*);
            GOTOXY (ind, lin2);
            write (*);
        END;
         FOR ind := lin2-1 DOWNTO lin1+1 DO
          BEGIN
             GOTOXY (col1, ind);
             WRITE (*);
            GOTOXY (col2,ind);
             WRITE (*);
             END;
           WINDOW (col1+1,lin1+1,col2-1,lin2-1);
           GOTOXY (col1,lin2-1);
           WRITE (pressione alguma tecla para continuar);
           ch := READKEY;
           CLRSCR;
         FOR ind := 1 TO 100 DO
           WRITE (#);
           WINDOW (1,1,80,25);
           GOTOXY ((col1 + col2) DIV 2,
                 (lin1 + lin2) DIV 2);
         WRITELN (.ponto central dessa janel);
         GOTOXY (1,25);
         WRITE (deseja nova janela S/N??? );
         REPEAT
           ch :=UPCASE (READKEY);
         UNTIL ch IN[S,N];
         UNTIL ch = N;
END.  
