Programando en Borland C++
5.02 (Cap.II)
Hola amigos del Blog.
En esta entrega aprenderemos a pintar en pantalla “Cajas” o
rectángulos mediante rutinas que faciliten la tarea.Las “Cajas” podrán tener borde de distintos tipos (simple, doble, ancho…) y con su color propio.
Para ello nos crearemos una estructura que contenga la información de cada una de nuestras “Cajas”.
struct rCaja
{int Fila,
Columna, Largo, Alto, Tinta, Papel, Marco, Fondo;} Caja;
Parece que
todos los elementos se entienden con claridad. El elemento ”Fondo” se usa para poner el
color de fondo en casos en el que el ”Marco” sea especial como veremos en el
ejemplo.
De esta
manera, en nuestro programa principal bastaría con llamar a la función “PintaCaja” con
los elementos de la estructura debidamente asignados, para pintar una “Caja” en
pantalla.Veamos cómo quedaría la función y el programa principal:
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <dos.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <dos.h>
#include <windows.h>
//======================================================================
// Colores
// Colores
// http://sertocestutoriales.blogspot.com.es/
// https://www.youtube.com/user/sertoces
//=======================================================================
#define NEGRO 0
#define AZUL 1
#define VERDE 2
#define CYAN 3
#define GRANATE 4
#define MORADO 5
#define MARRON 6
#define BLANCO 7
#define GRIS 8
#define AZULB 9
#define VERDEB 10
#define CYANB 11
#define ROJO 12
#define LILA 13
#define AMARILLO 14
#define BLANCOB 15
#define BRILLO 128
struct rCaja// https://www.youtube.com/user/sertoces
//=======================================================================
#define NEGRO 0
#define AZUL 1
#define VERDE 2
#define CYAN 3
#define GRANATE 4
#define MORADO 5
#define MARRON 6
#define BLANCO 7
#define GRIS 8
#define AZULB 9
#define VERDEB 10
#define CYANB 11
#define ROJO 12
#define LILA 13
#define AMARILLO 14
#define BLANCOB 15
#define BRILLO 128
{ int Fila, Columna, Largo, Alto, Tinta, Papel, Marco, Fondo; } Caja;
//========================================================================
// Funcion Caja
// http://sertocestutoriales.blogspot.com.es/
// https://www.youtube.com/user/sertoces
//========================================================================
void PintaCaja (rCaja Caja)
{
char ESI, ESD, EII, EID, HS, HI, VI, VD;
int i, j, PapelEsp;
// Funcion Caja
// http://sertocestutoriales.blogspot.com.es/
// https://www.youtube.com/user/sertoces
//========================================================================
void PintaCaja (rCaja Caja)
{
char ESI, ESD, EII, EID, HS, HI, VI, VD;
int i, j, PapelEsp;
_setcursortype(_NOCURSOR);
PapelEsp=Caja.Papel;
PapelEsp=Caja.Papel;
if (Caja.Marco <0) //Si es menor que cero nos Mandan un character determinado
{ //lo convertimos a positivo y lo usamos como MARCO.
i = Caja.Marco*-1;
ESI=i; ESD=i; EII=i; EID=i; HS=i; HI=i; VI=i; VD=i;
}
else
//En función del tipo de MARCO inicializamos las esquinas y las líneas Verticales y
{ //lo convertimos a positivo y lo usamos como MARCO.
i = Caja.Marco*-1;
ESI=i; ESD=i; EII=i; EID=i; HS=i; HI=i; VI=i; VD=i;
}
else
//En función del tipo de MARCO inicializamos las esquinas y las líneas Verticales y
//Horizontales
switch (Caja.Marco)
{
case 1: ESI=218; ESD=191; EII=192; EID=217; HS=196; HI=196; VI=179; VD=179; break; //Linea simple
case 2: ESI=201; ESD=187; EII=200; EID=188; HS=205; HI=205; VI=186; VD=186; break; //Linea doble
case 3: ESI=219; ESD=219; EII=219; EID=219; HS=223; HI=220; VI=219; VD=219; break; //Linea ancha
case 4: ESI=220; ESD=220; EII=223; EID=223; HS=220; HI=223; VI=219; VD=219; break; //Linea Ancha corta
case 5: ESI=219; ESD=219; EII=223; EID=223; HS=223; HI=223; VI=219; VD=219; break; //Linea Ancha corta-abajo
case 6: ESI=220; ESD=220; EII=219; EID=219; HS=220; HI=220; VI=219; VD=219; break; //Linea Ancha corta-arriba
case 7: ESI= 43; ESD= 43; EII= 43; EID= 43; HS= 45; HI= 45; VI=221; VD=221; break; //Linea texto
case 8: ESI=254; ESD=254; EII=254; EID=254; HS=254; HI=254; VI=254; VD=254; break; //Linea puntos
case 9: ESI=250; ESD=250; EII=250; EID=250; HS=250; HI=250; VI=250; VD=250; break; //Linea puntos
default: ESI= 32; ESD= 32; EII= 32; EID= 32; HS= 32; HI= 32; VI= 32; VD= 32; break;
}
switch (Caja.Marco)
{
case 1: ESI=218; ESD=191; EII=192; EID=217; HS=196; HI=196; VI=179; VD=179; break; //Linea simple
case 2: ESI=201; ESD=187; EII=200; EID=188; HS=205; HI=205; VI=186; VD=186; break; //Linea doble
case 3: ESI=219; ESD=219; EII=219; EID=219; HS=223; HI=220; VI=219; VD=219; break; //Linea ancha
case 4: ESI=220; ESD=220; EII=223; EID=223; HS=220; HI=223; VI=219; VD=219; break; //Linea Ancha corta
case 5: ESI=219; ESD=219; EII=223; EID=223; HS=223; HI=223; VI=219; VD=219; break; //Linea Ancha corta-abajo
case 6: ESI=220; ESD=220; EII=219; EID=219; HS=220; HI=220; VI=219; VD=219; break; //Linea Ancha corta-arriba
case 7: ESI= 43; ESD= 43; EII= 43; EID= 43; HS= 45; HI= 45; VI=221; VD=221; break; //Linea texto
case 8: ESI=254; ESD=254; EII=254; EID=254; HS=254; HI=254; VI=254; VD=254; break; //Linea puntos
case 9: ESI=250; ESD=250; EII=250; EID=250; HS=250; HI=250; VI=250; VD=250; break; //Linea puntos
default: ESI= 32; ESD= 32; EII= 32; EID= 32; HS= 32; HI= 32; VI= 32; VD= 32; break;
}
gotoxy (Caja.Columna, Caja.Fila);
if (Caja.Marco==4 || Caja.Marco==6) PapelEsp=Caja.Fondo;
if (PapelEsp>7) textcolor(Caja.Tinta+BRILLO); else textcolor(Caja.Tinta);
textbackground(PapelEsp);
cprintf("%c",ESI);
if (PapelEsp>7) textcolor(Caja.Tinta+BRILLO); else textcolor(Caja.Tinta);
textbackground(PapelEsp);
cprintf("%c",ESI);
for (i = 1; i < Caja.Largo-1; i++) cprintf("%c",HS);
cprintf("%c",ESD);
cprintf("%c",ESD);
if (Caja.Papel>7) textcolor(Caja.Tinta+BRILLO); else textcolor(Caja.Tinta);
textbackground(Caja.Papel);
textbackground(Caja.Papel);
for (j=1; j<Caja.Alto-2; j++)
{
gotoxy (Caja.Columna, Caja.Fila+j);
cprintf("%c",VI);
for (i = 1; i < Caja.Largo-1; i++) cprintf("%c",32);
cprintf("%c",VD);
}
{
gotoxy (Caja.Columna, Caja.Fila+j);
cprintf("%c",VI);
for (i = 1; i < Caja.Largo-1; i++) cprintf("%c",32);
cprintf("%c",VD);
}
if (Caja.Marco==4 || Caja.Marco==5) PapelEsp=Caja.Fondo; else PapelEsp=Caja.Papel;
gotoxy (Caja.Columna, Caja.Fila+j);
if (PapelEsp>7) textcolor(Caja.Tinta+BRILLO); else textcolor(Caja.Tinta);
textbackground(PapelEsp);
cprintf("%c",EII);
for (i = 1; i < Caja.Largo-1; i++) cprintf("%c",HI);
cprintf("%c",EID);
}
//========================================================================
// FIN Funcion Caja
//========================================================================
gotoxy (Caja.Columna, Caja.Fila+j);
if (PapelEsp>7) textcolor(Caja.Tinta+BRILLO); else textcolor(Caja.Tinta);
textbackground(PapelEsp);
cprintf("%c",EII);
for (i = 1; i < Caja.Largo-1; i++) cprintf("%c",HI);
cprintf("%c",EID);
}
//========================================================================
// FIN Funcion Caja
//========================================================================
//************************************************************************
//************************************************************************
//========================================================================
// Programa principal
//========================================================================
main()
{
//--------------------------------------------------------------------
//Test de Caja
//--------------------------------------------------------------------
gotoxy(20,2);
printf("Pulsa una tecla");
rCaja MyCaja;
MyCaja.Fila = 1;
MyCaja.Columna = 60;
MyCaja.Largo = 20;
MyCaja.Alto = 26;
MyCaja.Tinta = CYANB;
MyCaja.Papel = VERDE;
MyCaja.Fondo = AMARILLO;
MyCaja.Columna = 60;
MyCaja.Largo = 20;
MyCaja.Alto = 26;
MyCaja.Tinta = CYANB;
MyCaja.Papel = VERDE;
MyCaja.Fondo = AMARILLO;
for (MyCaja.Marco = 0; MyCaja.Marco < 10; MyCaja.Marco++)
{
PintaCaja (MyCaja);
getch();
}
}
//=======================================================================
// FIN Programa principal
// http://sertocestutoriales.blogspot.com.es/
// https://www.youtube.com/user/sertoces
//=======================================================================
Os dejo como tarea pintar un “efecto sombra” a la “Caja”.
{
PintaCaja (MyCaja);
getch();
}
}
//=======================================================================
// FIN Programa principal
// http://sertocestutoriales.blogspot.com.es/
// https://www.youtube.com/user/sertoces
//=======================================================================
Os dejo como tarea pintar un “efecto sombra” a la “Caja”.
Espero que
os sea útil e instructivo.
En la
próxima entrega veremos cómo se pueden simular “Botones”.
Si os ha gustado suscribíos
a mi canal y compartid esta entrada.
Gracias a todos.