InicioHazlo Tu MismoC++ Marco dinamico con Textcolor.

C++ Marco dinamico con Textcolor.

Hazlo Tu Mismo6/7/2014
Vale, lo que vamos a aprender nuevo es como hacer un marco y aprender a escribir dentro de el sin tener que borrar la pantalla y ademas, agregandole un color individual a cada letra.

C++ Marco dinamico con Textcolor.





Empecemos con el codigo:

Vale. Necesitaremos lo siguiente

Librerias:
#include <iostream>
#include <windows.h>
#include <stdio.h>


Por que estas librerias?
El iostream es muy simple, es solo para usar el cout y el cin
El windows.h nos permitira usar el comando para delay o retraso que es Sleep y los comandos para poder usar las coordenadas y el color.
El stdio.h junto con el windows.h nos permitira hacer el marco.

Ahora definimos colores para no tener que aprendernos los numeros de los colores a memoria:

#define negro 0
#define azul 1
#define verde 2
#define cyan 3
#define rojo 4
#define magenta 5
#define marron 6
#define grisclaro 7
#define grisoscuro 8
#define azulclaro 9
#define verdeclaro 10
#define cyanclaro 11
#define rojoclaro 12
#define magentaclaro 13
#define amarillo 14
#define blanco 15


Sin olvidar nuestro querido: using namespace std;

Ahora declaramos la funcion t (que es textcolor) con un parametro entero.
Textcolor de linea con el windows.h que permitira escribir el color en una sola linea
Nos quedaria asi:

void t(int n){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n);
}


Ahora declaramos la funcion g (que es gotoxy parecido al borland) con dos parametros entero.
Gotoxy emulado con el windows.h que permitira escribir en la linea que desees sin hacer un Clear Screen.
Nos quedaria asi:

void g(int x, int y){

//X=COLUMNAS
//Y=FILAS

  HANDLE coss = GetStdHandle(STD_OUTPUT_HANDLE);
  COORD Pcoss;
  Pcoss.X = x;
  Pcoss.Y = y;
  SetConsoleCursorPosition(coss, Pcoss);

  }


Vale, ahora que tenemos las funciones principales. Declararemos las funciones que utilizaremos para reducir la escritura de algo a una cosa mas pequeña sin tener que declarar funcion por funcion:

/*Escribir solo en color blanco con coordenadas
Ejemplo:
  coutg(3,4,"Patata");
  
  donde el 3 es el espaciado " "
  donde el 4 es la linea
  donde "Patata" es imprimir
  */
void coutg(int x, int y, char* output){
    g(x,y); t(blanco); cout<<output;
}


/*Escribir en cualquier color con coordenadas

Ejemplo:
  coutg(3,4,rojo,"Perrito");
  
  donde el 3 es el espaciado " "
  donde el 4 es la linea
  donde rojo es el color
  donde "Perrito" es imprimir
  */
void coutc(int x, int y, int n, char* output){
    g(x,y); t(n); cout<<output;
}

/*Coordenadas en color para casos especiales
Ejemplo
gt(3,4,blanco); 

donde el 3 es el espaciado " "
donde el 4 es la linea
donde blanco es el color
*/
void gt(int x, int y, int n){
    g(x,y); t(n);
}

/*Cout simple con coordenadas*/
void couts(int x, int y, char* output){
    g(x,y); cout<<output;
}

/*Printf simple con coordenadas*/
void print(int x, int y, char* output, int w){
    g(x,y); printf(output,w);
}
/*Printf con textcolor y coordenadas*/  
void printc(int x, int y, int n, char* output, int w){
    g(x,y); t(n); printf(output,w);
}
/*Printf blanco*/
void printg(int x, int y, char* output, int w){
    g(x,y); t(blanco); printf(output,w);
}


Ahora nos toca declarar el cuadro, vale. Esto es muy sencillo, ya que esta facilmente hecho para que solo tengan que copiar y pegar. los limites siempre seran X de 1 al 77 y Y de 1 al 21
Entonces:

void Limite(){
int i,j=1,w;
gt(28,23,blanco); printf("Cargando, Espere por favor.");
    //textocolor
    t(verde);
    for (i= 1; i<78 ; i++){
        Sleep(5);

        g(1,1); printf("%c",201);
        g(78,1); printf("%c",187);       

        g(i,1); printf("%c",205);
        g(i,22); printf("%c",205);
        
if(i%2==0){  
        if(j<22){
        j++;
        g(1,j); printf("%c",186);
        g(78,j); printf("%c",186);
}
}
        g(78,22); printf("%c",188);
        g(1,22); printf("%c",200);  
}

        g(1,1); printf("%c",201);
        g(78,1); printf("%c",187);
        g(78,22); printf("%c",188);
        g(1,22); printf("%c",200);
        gt(28,23,blanco); printf("                            ");
        //Nombre o algo
        g(28,23); printf("//TU NOMBRE//");
}

No olvidar colocar un nombre o algo en la seccion //TU NOMBRE//



Vale. Ahora nos toca lo mas dificil de comprender, que es la funcion main principal o en este caso aprender a hacer cout y cin por coordenadas sin tener que usar un clear screen. Podremos imprimir lo que deseemos con solo especificar la coordenada. Los limites de coordenadas para que no se les salgan del cuadro siempre seran:
x de 3 hasta 75
y de 3 hasta 20
Tendremos que aplicar siempre si queremos usar el cuadro las coordenadas de gotoxy y no usar ni endl ni n para bajar linea. Simplemente para continuar en otra linea subes el valor de la coordenada Y un numero o los que desees.

int main(void){
    Limite();
//limite para escribir en x de 3 hasta 75
//limite para escribir en y de 3 hasta 20

    coutc(3,3,rojo,"Hola amigos, como estan?");
    coutc(3,4,marron,"Yo estoy muy bien, y ustedes?");
    coutc(3,5,azul,"Estamos genial");
//en este caso para escribir solamente en blanco
    coutg(3,9,"Este escrito con coutg aparecera siempre en blanco");
//coordenadas con printf
    print(3,11,"%c",205);
    printc(3,12,rojo,"%c",205);
//en este caso printf  escribe solamente en blanco
    printg(3,13,"%c",205);
//Tambien es posible hacerlo del modo clasico
    g(3,16); t(amarillo); cout<<"Prueba de modo clasico";
//Para escribir y leer
    coutc(3,19,rojo,"Ingrese un numero");
    int a;
    g(3,20);cin>>a;
    Sleep(5000);

}




Vale, ya terminamos el codigo explicado paso a paso. Tendriamos que tener algo como esto:


#include <iostream>
#include <windows.h>
#include <stdio.h>

#define negro 0
#define azul 1
#define verde 2
#define cyan 3
#define rojo 4
#define magenta 5
#define marron 6
#define grisclaro 7
#define grisoscuro 8
#define azulclaro 9
#define verdeclaro 10
#define cyanclaro 11
#define rojoclaro 12
#define magentaclaro 13
#define amarillo 14
#define blanco 15

using namespace std;

//Textcolor de linea con el windows.h que permitira escribir el color en una sola linea
void t(int n){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n);
}

//Gotoxy emulado con el windows.h que permitira escribir en la linea que desees sin hacer un Clear Screen.
void g(int x, int y){

//X=COLUMNAS
//Y=FILAS

  HANDLE coss = GetStdHandle(STD_OUTPUT_HANDLE);
  COORD Pcoss;
  Pcoss.X = x;
  Pcoss.Y = y;
  SetConsoleCursorPosition(coss, Pcoss);

  }
  
/*Escribir siempre en color blanco con coordenadas
Ejemplo:
  coutg(3,4,"Patata";)
  
  donde el 3 es el espaciado " "
  donde el 4 es la linea
  donde "Patata" es imprimir
  */
void coutg(int x, int y, char* output){
    g(x,y); t(blanco); cout<<output;
}


/*Escribir en cualquier color con coordenadas

Ejemplo:
  coutc(3,4,rojo,"Perrito";)
  
  donde el 3 es el espaciado " "
  donde el 4 es la linea
  donde rojo es el color
  donde "Perrito" es imprimir
  */
void coutc(int x, int y, int n, char* output){
    g(x,y); t(n); cout<<output;
}

/*Coordenadas en color para casos especiales
Ejemplo
gt(3,4,blanco);

donde el 3 es el espaciado " "
donde el 4 es la linea
*/
void gt(int x, int y, int n){
    g(x,y); t(n);
}

/*Cout simple con coordenadas*/
void couts(int x, int y, char* output){
    g(x,y); cout<<output;
}

/*Printf simple con coordenadas*/
void print(int x, int y, char* output, int w){
    g(x,y); printf(output,w);
}
/*Printf con textcolor y coordenadas*/  
void printc(int x, int y, int n, char* output, int w){
    g(x,y); t(n); printf(output,w);
}
/*Printf blanco*/
void printg(int x, int y, char* output, int w){
    g(x,y); t(blanco); printf(output,w);
}
  

//El cuadro
void Limite(){
int i,j=1,w;
gt(28,23,blanco); printf("Cargando, Espere por favor.");
    //textocolor
    t(verde);
    for (i= 1; i<78 ; i++){
        Sleep(5);

        g(1,1); printf("%c",201);
        g(78,1); printf("%c",187);       

        g(i,1); printf("%c",205);
        g(i,22); printf("%c",205);
        
if(i%2==0){  
        if(j<22){
        j++;
        g(1,j); printf("%c",186);
        g(78,j); printf("%c",186);
}
}
        g(78,22); printf("%c",188);
        g(1,22); printf("%c",200);  
}

        g(1,1); printf("%c",201);
        g(78,1); printf("%c",187);
        g(78,22); printf("%c",188);
        g(1,22); printf("%c",200);
        gt(28,23,blanco); printf("                            ");
        //Nombre o algo
        g(28,23); printf("//TU NOMBRE//");
}


int main(void){
    Limite();
//limite para escribir en x de 3 hasta 75
//limite para escribir en y de 3 hasta 20

    coutc(3,3,rojo,"Hola amigos, como estan?");
    coutc(3,4,marron,"Yo estoy muy bien, y ustedes?");
    coutc(3,5,azul,"Estamos genial");
//en este caso para escribir solamente en blanco
    coutg(3,9,"Este escrito con coutg aparecera siempre en blanco");
//coordenadas con printf
    print(3,11,"%c",205);
    printc(3,12,rojo,"%c",205);
//en este caso printf  escribe solamente en blanco
    printg(3,13,"%c",205);
//Tambien es posible hacerlo del modo clasico
    g(3,16); t(amarillo); cout<<"Prueba de modo clasico";
//Para escribir y leer
    coutc(3,19,rojo,"Ingrese un numero");
    int a;
    g(3,20);cin>>a;
    Sleep(5000);

}





Ahora vayan practicando por ustedes mismos y lograran grandes cosas.
Datos archivados del Taringa! original
30puntos
182visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
0visitas
0comentarios
Dar puntos:

Posts Relacionados

Dejá tu comentario

0/2000

No hay comentarios nuevos todavía

Autor del Post

r
rogelio_Zero🇦🇷
Usuario
Puntos0
Posts6
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.