About Taringa!

Popular channels

C++ Cambio de color dentro del programa

Hola todos. Aqui les vengo con un algoritmo de c++ que me permite cambiar de color las letras sin tener que modificar el archivo, solo necesitas ejecutar el programa y desde adentro podras cambiar los colores al gusto de usuario


Para poder entender parte de post, te recomiendo que entres a mi post anterior aca: http://www.taringa.net/posts/hazlo-tu-mismo/17874651/C-Marco-dinamico-con-Textcolor.html


Ahora con el post.

Sin cambiar


Cambiado



Los cambios realizados los podemos ver aca:


Libreria para el Toupper(Characters en mayusculas)


#include <ctype.h>


Como ocultar y mostrar el cursor:


//Oculta el cursor de escribir True: Muestra el Cursor False: Oculta el cursor
void Cursor(bool w){

  HANDLE coss = GetStdHandle(STD_OUTPUT_HANDLE);
  CONSOLE_CURSOR_INFO cci;
  cci.dwSize = 10;
  if(w==!true){
  cci.bVisible = FALSE;
  }
  if(w==true){
  cci.bVisible = TRUE;
  }
  SetConsoleCursorInfo(coss,&cci);
}




Variables de color


//Color de la letra de imprimir
int colorletra=15;
//Color del marco
int colorlimite=2;
//Color para leer
int colorleer=15;



Nueva funcion llamada Leer


//Funcion para avisar al programa de que vaa leer alguna variable. True: Para activar el color de leer  False: Desactivar
void leer(bool a){
 
 if(a==true){
        t(colorleer);
    }
    
 if(a==false){
        t(colorletra);
    }
    
}



Nueva funcion para borrar la memoria escrita en el teclado


/*
Borra la memoria de teclado y ademas, tiene coordenadas y la funcion Leer en verdadero. Es utilizado para colocarse cuando se va a
a leer una variable char con cin.getline() o gets()
*/
void fl(int x, int y){
g(x,y); fflush(stdin); leer(true);
}



Un nuevo system("PAUSE") mas corto y menos molesto


//Es para que el pausado no se vea en pantalla, se coloca en un sitio que no moleste al cuadro
void pause(){
gt(0,24,negro); Cursor(false); system("PAUSE"); Cursor(true); t(colorletra);
}




Elimine algunas cosas del anterior post, igual lo pueden volver a agregar, aunque deberia tener una pequeña modificacion para no causar conflicto pero se los dejare a ustedes para que practiquen.

Ahora el algoritmo

Nota:
Para cambiar el color es necesario escribirlo como esta en la pantalla sin importar si es Mayuscula, Minuscula o las dos cosas.

En el menu de tipos de cambio de color no es necesario presionar enter para ingresar, solo pongan le letra especificada sin importar Mayusculas o Minusculas



#include <iostream>
#include <windows.h>
#include <stdio.h>
//#include <wincon.h>
#include <time.h>
#include <string>  //comparador char
#include <conio.h> //getch(Presiona y prosigue)
#include <ctype.h> //toupper(Pone las variables chars en mayuscula)

#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;


//Oculta el cursor de escribir True: Muestra el Cursor False: Oculta el cursor
void Cursor(bool w){

  HANDLE coss = GetStdHandle(STD_OUTPUT_HANDLE);
  CONSOLE_CURSOR_INFO cci;
  cci.dwSize = 10;
  if(w==!true){
  cci.bVisible = FALSE;
  }
  if(w==true){
  cci.bVisible = TRUE;
  }
  SetConsoleCursorInfo(coss,&cci);

}

//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);

  }

/*Coordenadas en color para casos especiales
Ejemplo
gt(3,4,blanco); printf("Paraguas %c",205);

donde el 3 es el espaciado " "
donde el 4 es la linea
donde blanco es el color
y el caso especial printf
*/
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;
}

//Color de la letra de imprimir
int colorletra=15;
//Color del marco
int colorlimite=2;
//Color para leer
int colorleer=15;


//Funcion para avisar al programa de que vaa leer alguna variable. True: Para activar el color de leer  False: Desactivar
void leer(bool a){
 
 if(a==true){
        t(colorleer);
    }
    
 if(a==false){
        t(colorletra);
    }
    
}

/*
Borra la memoria de teclado y ademas, tiene coordenadas y la funcion Leer en verdadero. Es utilizado para colocarse cuando se va a
a leer una variable char con cin.getline() o gets()
*/
void fl(int x, int y){
g(x,y); fflush(stdin); leer(true);
}

//Es para que el pausado no se vea en pantalla, se coloca en un sitio que no moleste al cuadro
void pause(){
gt(0,24,negro); Cursor(false); system("PAUSE"); Cursor(true); t(colorletra);
}

//Borra todo lo que este dentro de cuadro
void cls(){
    Cursor(false);
    int x, y;
    x=2;
    y=2;
    for(y=2;y<=21;y++){
    for(x=2;x<=77;x++){
    couts(x,y," ");
    }
}
    Cursor(true);
}


//El cuadro. True: Activa la animacion False: Desactiva la animacion
void Limite(bool a){
    system("cls");
    int u,j=1;
    gt(28,23,blanco); printf("Cargando, Espere por favor.");
    //textocolor
    t(colorlimite);
    for (u= 1; u<78 ; u++){
        if(a==true){
        Sleep(5);
    }

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

        g(u,1); printf("%c",205);
        g(u,22); printf("%c",205);
        
if(u%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,colorletra); printf("                            ");
        //Nombre o algo
        g(33,23); printf("Probando algo");
}




//Funcion del cambiado de letra. 0: Para imprimir 1:Para leer 3:Cuadro
void cambiandoletra(short w){
    
 cls();
 bool salida=false;
 
 do{
        couts(2,2,"Azul"); couts(35,2,"Verde");
        couts(2,3,"Cyan"); couts(35,3,"Rojo");
        couts(2,4,"Magenta"); couts(35,4,"Marron");
        couts(2,5,"Grisclaro"); couts(35,5,"Grisoscuro");
        couts(2,6,"Azulclaro"); couts(35,6,"Verdeclaro");
        couts(2,7,"Cyanclaro"); couts(35,7,"Rojoclaro");
        couts(2,8,"Magentaclaro"); couts(35,8,"Amarillo");
        couts(2,9,"Blanco");
        fl(3,11); char option[20];
        cin.getline(option,20);
        leer(false);
        int i;
        for(i=0;i<=20;i++){
        option[i]=toupper(option[i]);
        }
        
        cls();

        
        if(strcmp(option,"AZUL")==0){
            if(w==0){
        colorletra=azul;
            }
            if(w==1){
        colorleer=azul;
            }
            if(w==2){
        colorlimite=azul;
            }
        }
        
        if(strcmp(option,"VERDE")==0){
            if(w==0){
        colorletra=verde;
        }
        if(w==1){
        colorleer=verde;
            }
            if(w==2){
        colorlimite=verde;
            }
           }
        
        if(strcmp(option,"CYAN")==0){
            if(w==0){
        colorletra=cyan;
        }
        if(w==1){
        colorleer=cyan;
            }
            if(w==2){
        colorlimite=cyan;
            }
           }
        
        if(strcmp(option,"ROJO")==0){
            if(w==0){
        colorletra=rojo;
        }
        if(w==1){
        colorleer=rojo;
            }
            if(w==2){
        colorlimite=rojo;
            }
           }
    
        if(strcmp(option,"MAGENTA")==0){
            if(w==0){
        colorletra=magenta;
        }
        if(w==1){
        colorleer=magenta;
            }
            if(w==2){
        colorlimite=magenta;
            }
           }
        
        if(strcmp(option,"MARRON")==0){
            if(w==0){
        colorletra=marron;
        }
        if(w==1){
        colorleer=marron;
            }
            if(w==2){
        colorlimite=marron;
            }
           }
        
        if(strcmp(option,"GRISCLARO")==0){
            if(w==0){
        colorletra=grisclaro;
        }
        if(w==1){
        colorleer=grisclaro;
            }
            if(w==2){
        colorlimite=grisclaro;
            }
           }
        
        if(strcmp(option,"GRISOSCURO")==0){
            if(w==0){
        colorletra=grisoscuro;
        }
        if(w==1){
        colorleer=grisoscuro;
            }
            if(w==2){
        colorlimite=grisoscuro;
            }
           }
        
        if(strcmp(option,"AZULCLARO")==0){
            if(w==0){
        colorletra=azulclaro;
        }
        if(w==1){
        colorleer=azulclaro;
            }
            if(w==2){
        colorlimite=azulclaro;
            }
           }
        
        if(strcmp(option,"VERDECLARO")==0){
            if(w==0){
        colorletra=verdeclaro;
        }
        if(w==1){
        colorleer=verdeclaro;
            }
            if(w==2){
        colorlimite=verdeclaro;
            }
           }
        
        if(strcmp(option,"CYANCLARO")==0){
            if(w==0){
        colorletra=cyanclaro;
        }
        if(w==1){
        colorleer=cyanclaro;
            }
            if(w==2){
        colorlimite=cyanclaro;
            }
           }
        
        if(strcmp(option,"ROJOCLARO")==0){
            if(w==0){
        colorletra=rojoclaro;
        }
        if(w==1){
        colorleer=rojoclaro;
            }
            if(w==2){
        colorlimite=rojoclaro;
            }
           }
        
        if(strcmp(option,"MAGENTACLARO")==0){
            if(w==0){
        colorletra=magentaclaro;
        }
        if(w==1){
        colorleer=magentaclaro;
            }
            if(w==2){
        colorlimite=magentaclaro;
            }
           }
        
        if(strcmp(option,"AMARILLO")==0){
            if(w==0){
        colorletra=amarillo;
        }
        if(w==1){
        colorleer=amarillo;
            }
            if(w==2){
        colorlimite=amarillo;
            }
           }
        
        if(strcmp(option,"BLANCO")==0){
            if(w==0){
        colorletra=blanco;
        }
        if(w==1){
        colorleer=blanco;
            }
            if(w==2){
        colorlimite=blanco;
            }
           }
        
        if(strcmp(option,"SALIR")==0){
        salida=true;
        Sleep(1000);
        }
        
        
        if(w==0){
        t(colorletra);
               }
               
        if(w==2){
         system("cls"); Limite(false);
            }
              
      
    }while(salida==false);
 
       
}

void prueba(){
   
   bool salida=false;
   
   do{
        couts(2,2,"Esto es una prueba");
        couts(2,4,"[A].-Cambiar Color Letra");
        couts(2,5,"[B].-Cambiar Color Leer");
        couts(2,6,"[C].-Cambiar Color Cuadro");
        
        fl(3,8); char option=getch(); leer(false);
        option=toupper(option);
        
        switch(option){
         
         case 'A':
                cambiandoletra(0);
                break;
                
         case 'B':
                cambiandoletra(1);
                break;
                
         case 'C':
                cambiandoletra(2);
                break;
                
         
         default:
                break;   
            
        }
        
        
        
    }while(salida==false); 
    
}


int main(){
t(blanco);
Limite(true);
prueba();
}
0No comments yet
      GIF