Manejo de colores en Pascal

Por at
Manejo de colores en el Lenguaje Pascal

Para configurar los atributos de color de una pantalla, mediante el lenguaje Pascal, se emplean rutinas y recursos de programación, como constantes, variables, y procedimientos de manejo de color; los cuales serán estudiados en los apartados siguientes de este artículo.

Todas estas rutinas y recursos para el manejo de color, se encuentran predefinidos dentro de la unidad Crt. En los compiladores Free Pascal y el intérprete N-IDE Pascal, la unidad Crt se implementa, hasta cierta medida, para mantener compatibilidad con la sintaxis de Turbo Pascal.

Constantes de color

Cuando se trabaja en el modo textual, de una pantalla a color, es posible dar un aspecto más llamativo a su contenido ajustando los atributos de color del texto mostrado en pantalla. Para hacer esto posible, en el lenguaje Pascal se emplean constantes numéricas para representar a cada color, según la tabla siguiente:

ConstanteValorColor
Black0Negro
Blue1Azul
Green2Verde
Cyan3Cian
Red4Rojo
Magenta5Fucsia
Brown6Café
LightGray7Gris claro
DarkGray8Gris Oscuro
LightBlue9Azul claro
LightGreen10Verde claro
LightCyan11Cian claro
LightRed12Rojo claro
LightMagenta13Fucsia claro
Yellow14Amarillo
White15Blanco

Mediante cada constante de color se pueden elegir diferentes tonalidades para el color de texto y el color de resaltado de texto de la pantalla. Para ajustar estos dos atributos de color, se utilizan procedimientos que emplean estas constantes de color, o sus valores numéricos, como parámetros para indicar los colores que se deseen aplicar al texto contenido en pantalla.

Siempre que se vayan a utilizar las constantes de color, o cualquiera de los recursos de la unidad Crt, se requiere que esta unidad primero sea incluida dentro del programa:

Uses Crt;

Cambiar el color del texto

Mediante el procedimiento TextColor es posible seleccionar el color del texto en la pantalla, simplemente indicándole una constante de color (o su valor numérico) correspondiente al color que se desea utilizar. La sintaxis para este procedimiento es la siguiente:

TextColor (Color);

Dónde: Color representa un valor numérico entero dentro del rango de 0 .. 15, correspondiendo a una de las constantes de color definidas en la unidad Crt. Para aplicar color a un texto, es necesario que primero se ejecute una sentencia TextColor antes de ejecutar cualquier sentencia de escritura en pantalla con Write o WriteLn.

Para que esto le quede claro, a continuación se presenta un programa de ejemplo que utiliza dos formas diferentes de ajustar el color de texto; una mediante una constante de color y otra mediante un valor numérico:

Program Uso_de_TextColor;

Uses
   Crt;

Begin

   ClrScr;
   Writeln ('Compiladores de lenguaje Pascal');
   
   TextColor (Green); {Texto verde}
   Writeln ('FREE PASCAL');
   
   TextColor (LightRed); {Texto rojo claro}
   Writeln ('N-IDE PASCAL');
   
   TextColor (14); {Texto amarillo}
   Writeln ('TURBO PASCAL');

   TextColor (7); {Texto gris claro}
   Write ('Pulse una tecla para salir');
   ReadKey;

End.

Además de las constantes de colores, disponemos de otra constante especial llamada Blink, cuyo valor numérico es 128. Si se suma Blink (o su valor) al valor de color dentro de una sentencia TextColor, se aplicará un efecto de parpadeo al texto. Para poner esto en práctica, veamos un ejemplo:

Program Uso_de_Blink;

Uses
   Crt;

Begin

   ClrScr;
   TextColor(Yellow); {Amarillo}
   WriteLn ('Welcome to:');

   TextColor (LightRed + 128); {Rojo claro + Parpadeo}
   WriteLn ('THE PASCAL LANGUAJE!');
   
   TextColor (lightBlue); {Azul claro}
   Write ('Pulse una tecla para salir');
   ReadKey;
   
End.

Algunos compiladores e intérpretes reconocen la constante blink solamente por motivos de compatibilidad con la sintaxis de Turbo Pascal 7.0, pero ésta no tendrá ningún efecto al compilar o ejecutar el programa.

Cambiar el color de resaltado de texto

El procedimiento TextBackGround se utiliza para seleccionar el color de resaltado (fondo) del texto en pantalla. La sintaxis para este procedimiento es:

TextBackGround (Color);

Donde, Color representa un valor numérico dentro del rango 0 .. 7, correspondiendo a una de las ocho primeras constantes de color. Nótese que estas primeras constantes corresponden a los colores oscuros; si se intenta utilizar un valor de color claro, el resaltado se ajustará a un color oscuro equivalente.

Todos los textos posteriormente escritos tomarán el color de resaltado actualmente especificado. Para aplicar un color de resaltado a un texto, el procedimiento TextBackground se debe ejecutar antes de la sentencia de escritura del texto con Write o WriteLn. Observe el siguiente ejemplo:

Program Uso_de_TextBackGround;

Uses
   Crt;

Begin

   ClrScr;
   WriteLn ('Tip del día:');

   TextBackground (Green); {Resaltado verde}
   TextColor (Black); {Texto negro}
   WriteLn ('¡PROGRAMAR ES DIVERTIDO!');

   textBackground (0); {Resaltado negro}
   TextColor (7); {Texto gris claro}
   Write ('Pulse una tecla para salir');
   ReadKey;

End.

Normalmente, todos los procedimientos de limpieza de pantalla se ejecutan sobrescribiendo la pantalla con caracteres de espacio en blanco. Por consiguiente, si se ejecuta una sentencia Clrscr, la pantalla se limpiará aplicando los atributos de color de texto y color de resaltado actualmente seleccionados; es decir, toda la pantalla tendrá como fondo el color de resaltado de texto actual. Para comprobar esto, ejecute el siguiente código de programa:

Program Uso_de_Clrscr;

Uses
   Crt;

Begin

   TextBackGround (0); {Resaltado negro}
   TextColor (7); {Texto gris claro}
   ClrScr; {Limpieza con los colores iniciales}

   WriteLn ('Pulse enter para continuar');
   ReadKey;

   TextBackGround (3); {Resaltado cian}
   TextColor (0); {Texto negro}
   ClrScr; {Limpieza con los colores recientes}
   
   WriteLn ('¿De qué color es el fondo, ahora?');
   WriteLn ('Pulse enter para salir');
   ReadKey;

End.

La variable TextAttr

Esta variable es donde se almacenan los atributos de texto actualmente seleccionados. La variable TextAttr se encuentra predefinida dentro de la unidad Crt, mediante la siguiente declaración:

var TextAttr: Byte;

En esta variable, la información de los atributos de texto (color, resaltado y parpadeo) está codificada de la siguiente manera:

Codificación de bits de los atributos de texto en TextAttr

Donde ffff son los bits (0 – 3) para color de texto, bbb son los bits (4 – 6) para color de resaltado de texto, y B es el bit (7) para habilitación de parpadeo. Estos bits son actualizados cada vez que se modifican los atributos de texto.

Normalmente, los atributos de texto son establecidos a través de los procedimientos TextColor y TextBackground; sin embargo, también pueden ser establecidos almacenando un valor directamente en TextAttr.

Para establecer colores mediante la variable TextAttr, el color de resaltado sólo podrá elegirse de los primeros 8 colores de la tabla de constantes de color, y debe multiplicarse por 16 para asignarlo en las posiciones correctas de bits. Por ejemplo, la siguiente asignación establece el texto en amarillo parpadeante sobre resaltado verde:

TextAttr := Green * 16 + Yellow + Blink;

2 comentarios:

  1. Hola amigo, acabo de descubrir tu página y me ha ayudado mucho, gracias! De casualidad tú sabes por qué las letras no parpadean cuando se ejecuta el programa ya compilado (es decir el archivo .exe desde Windows o (bien desde "Símbolo de Sistema" de Widows))? Algo similar pasa con algunos carácteres, por ejemplo: letra alfa (Alt + 224) sí se visualiza en el IDE de Turbo Pascal pero no cuando se ejecuta el programa ya compilado .exe
    Cómo soluciono esto?, tiene solución?

    ResponderEliminar
    Respuestas
    1. Hola, y disculpa por tardar en responder, es que actualmente no cuento con una conexión a internet propia. No estoy completamente seguro en ambos casos, pero creo que la causa que no parpadee el texto (con blink) se deba un problema de incompatibilidad de Turbo Pascal con los sistemas actuales, ya que es un software muy antiguo; y el problema con los carácteres se debe al sistema de codificación de carácteres y a la configuración del idioma del teclado en el símbolo del sistema. Te recomiendo que comentes tu caso, solicitando ayuda, en el foro que te enlazo a continuación:

      https://www.lawebdelprogramador.com/foros/Pascal-Turbo-Pascal/index1.html

      Eliminar