Autor Tema: [DUDA] Combinación de teclas y cambiar color a textos  (Leído 4563 veces)

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
[DUDA] Combinación de teclas y cambiar color a textos
« en: 21 de Noviembre de 2010, 19:52:18 pm »
¡Hola!
Me presento de nuevo, con otro par de dudas que tengo :-S.

- La primera es que quiero ejecutar "X" función al pulsar una combinación de teclas determinada, por ejemplo, guardar un archivo de texto (que lo sé hacer) al pulsar Control + S (esto es lo que no sé hacer :S)

- La segunda, es que me gustaría poder dar color a "X" texto en mi programa, por ejemplo, que si tengo lo siguiente en la consola:


********************************************************
*   Nombre:                                                                                            *
*   Apellido:                                                                                            *
*   Edad:                                                                                                *
********************************************************

Y le quiera aplicar distintos colores (o estilos como negrita, etc), al final me quede así:

********************************************************
*   Nombre:                                                                                           *
*   Apellido:                                                                                            *
*   Edad:                                                                                                *
********************************************************

Bueno, nuevamente gracias por su atención, espero y me puedan ayudar con esta pequeña duda :-[
Saludos ^^
- Moderador de PHP


Comunidad PHPeros

[DUDA] Combinación de teclas y cambiar color a textos
« en: 21 de Noviembre de 2010, 19:52:18 pm »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #1 en: 21 de Noviembre de 2010, 22:20:18 pm »
Hola!

Bueno, primero lo de los colores.
En Windows creo que no se puede hacer. En linux puedes leerte esto que seguramente te ayudará:
http://www.elrincondelc.com/nuevorincon/foros/viewtopic.php?t=9335

Respecto a las combinaciones de teclas, he leído por ahí que en la tabla ASCII los números correspondientes a las combinaciones CTRL+A, CTRL+B... CTRL+Z van desde el 1 hasta el 26, lo que significa que solo tienes que leer un char por el teclado, pasarlo a INT y comprobar si es el 19 (Que equivaldría al CTRL+S si no contamos la Ñ, que no se si se cuenta, creo que no).

Espero que lo entiendas,
Un saludo!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #2 en: 22 de Noviembre de 2010, 03:43:21 am »
Bueno, en cuanto a lo de los colores, mala suerte por mí, ya que programo en Windows :-S

Ahora, con el tema de la combinación de teclas, te entendí perfectamente, la cosa es que necesito saber como meter ese getch() que comprueba si se pulsó la combinación dentro de un cin. A ver si me entiendes, te pongo una captura de mi programa:



El cursor (que no salió en la imagen), está justo a la par del cierre de las etiquetas de PHP, por si las dudas. Ahora bien, lo que quiero, es que si en algún momento deseo que mi script termine, con solo pulsar la combinación control + g, se guarden los datos en un archivo.

Espero que ahora sí me de a entender mejor ;)
Saludos ^^
- Moderador de PHP


Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #3 en: 22 de Noviembre de 2010, 11:53:27 am »
Lo único que se me ocurre es no usar cin. Usar siempre getchar o scanf.
Quiero decir, haces un bucle que este leyendo constantemente del teclado con getchar o scanf.
Si es una letra, la añades al string, si es un ENTER, le añades un salto de linea, y si es una combinación CONTROL+Q y eso, pues haces lo debido.

Así es la única forma que se me ocurre para hacerlo.
Con WinAPI si que puedes hacer fácilmente combinaciones de teclas para hacer hotkeys y tal... pero en C++ no se me ocurre ninguna manera.
En C puedes intentar hacer lo que te he comentado.

Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #4 en: 22 de Noviembre de 2010, 18:24:09 pm »
Estoy segurisimo que conio.h tenia una funcion de colores, buscalo! :)

Aqui te lo explican: http://cboard.cprogramming.com/brief-history-cprogramming-com/17978-colors-dos-console.html
¡Cuidate!
« Última modificación: 22 de Noviembre de 2010, 18:26:45 pm por gink »

Desconectado Farresito

  • PHPero Avanzado
  • ****
  • Mensajes: 385
  • Karma: 5
  • Sexo: Masculino
  • PimPamTomaC++
    • Ver Perfil
    • Farresito
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #5 en: 22 de Noviembre de 2010, 22:43:12 pm »
“Lo mejor de los booleanos es que si te equivocas estás a un sólo bit de la solución correcta.”

-- Anónimo

"No temo a los ordenadores; lo que temo es quedarme sin ellos"

-- Isaac Asimov

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #6 en: 23 de Noviembre de 2010, 00:37:31 am »
Lo único que se me ocurre es no usar cin. Usar siempre getchar o scanf.
Quiero decir, haces un bucle que este leyendo constantemente del teclado con getchar o scanf.
Si es una letra, la añades al string, si es un ENTER, le añades un salto de linea, y si es una combinación CONTROL+Q y eso, pues haces lo debido.

Así es la única forma que se me ocurre para hacerlo.
Con WinAPI si que puedes hacer fácilmente combinaciones de teclas para hacer hotkeys y tal... pero en C++ no se me ocurre ninguna manera.
En C puedes intentar hacer lo que te he comentado.

Saludos!

Vale, te entendí perfectamente ;). El únici inconveniente que le veo, es que si te equivocas, no podrás borrar el caracter en el cual te has equivocado, actualmente yo uso este código, para crear strings multilíneas, míralo:

Código: [Seleccionar]
int inicio = 15;
string descripcionScript, linea;
bool guardar = false;
   
do
{
    gotoxy(5, inicio);
    getline(cin, linea);
    descripcionScript += linea + '\n';
    inicio++;
}
while(!guardar);

Eso lo que hace es posicionarme el script en la celda #5, para que así no interfiera con el "diseño" de la consola (puedes ver el ejemplo en la imagen que puse en el anterior post), así que hice este nuevo código en el cual comprueba lo que me dijiste:

Código: [Seleccionar]
#include <iostream>
#include <string>
#include <conio2.h>

using namespace std;
bool salir = false;
string texto;
char tecla;

int main()
{
    cout << "Escribe los strings.\n\n";
   
    while(!salir)
    {
        tecla = getch();
       
        switch(tecla)
        {
            case 19:
                salir = true;
            break;
           
            case 13:
                texto += '\n';
                cout << endl;
            break;
               
            default:
                texto += tecla;
                cout << tecla;
            break;
        }                       
    }
   
    cout << "\n\nEl archivo ha finalizado la lectura porque has pulsado control + s\nLos datos obtenidos han sido los siguientes:\n\n";
    cout << texto;
   
    getch();
}

Bien, eso es todo, lo único que no entiendo es como borrar el último caracter de un string, o bien, pasar a la línea anterior. Espero ver si me puedan ayudar :-[

Saludos ^^s
- Moderador de PHP


Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #7 en: 23 de Noviembre de 2010, 01:15:34 am »
Aqui tienes para borrar el ultimo caracter de un String (Lo hice yo, cualquier cosa me pides):
Código: [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
    string texto;
    cout<<"Di algo"<<endl;
    cin>>texto;
   
    texto.erase(texto.length()-1,texto.length());
    cout<<texto<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

El string::erase(1,2) borra los caracteres desde el caracter seguido del que mencionaste como 1 (Si el texto es hola y mencionas a h como 1, el texto que borrara a partir es o) hasta el caracter que mencionaste como el 2 (El ultimo, en este caso a). (Me falto mencionar que tu pones al caracter que quieres como el numero que ocupa, si quieres borrar todo pones desde 0 hasta el total de caracteres en tu string)

En tu programa puedes poner que al detectar el BORRAR haga eso que te hice (Sin tanto texto es esto):
Código: [Seleccionar]
tustring.erase(tustring.length()-1,tustring.length());
Eso modifica automaticamente tu string, no lo tienes que volver a declarar.

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #8 en: 23 de Noviembre de 2010, 01:37:05 am »
¡Muchas gracias!

Le hice unas modificaciones para que si es necesario, borre el caracter anterior al pulsar la tecla BACKSPACE, así que todo el código me ha quedado algo así, a ver qué opinas:

Código: [Seleccionar]
int inicioY = 15;
int inicioX = 5;
char tecla;
bool guardar = false;
   
do
{
gotoxy(inicioX, inicioY);
tecla = getch();
     
switch(tecla)
{
// Al presionar backspace
case 8:
inicioX--;
gotoxy(inicioX, inicioY);
descripcionScript.erase(descripcionScript.length()-1,descripcionScript.length());
cout << " ";
break;
               
// Al presionar enter
case 13:
inicioX = 5;
inicioY++;
descripcionScript += "\n";
cout << "\n";
break;
           
// Al presionar Control + S
case 19:
guardar = true;
break;
           
// Al presionar cualquier tecla
default:
inicioX++;
descripcionScript += tecla;
cout << tecla;
break;
}
}   
while(!guardar);

Dime qué opinas del código, qué se podría mejorar y cosas así :)
Saludos ^^
- Moderador de PHP


Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #9 en: 23 de Noviembre de 2010, 19:34:24 pm »
¡Muchas gracias!

Le hice unas modificaciones para que si es necesario, borre el caracter anterior al pulsar la tecla BACKSPACE, así que todo el código me ha quedado algo así, a ver qué opinas:

Código: [Seleccionar]
int inicioY = 15;
int inicioX = 5;
char tecla;
bool guardar = false;
   
do
{
gotoxy(inicioX, inicioY);
tecla = getch();
     
switch(tecla)
{
// Al presionar backspace
case 8:
inicioX--;
gotoxy(inicioX, inicioY);
descripcionScript.erase(descripcionScript.length()-1,descripcionScript.length());
cout << " ";
break;
               
// Al presionar enter
case 13:
inicioX = 5;
inicioY++;
descripcionScript += "\n";
cout << "\n";
break;
           
// Al presionar Control + S
case 19:
guardar = true;
break;
           
// Al presionar cualquier tecla
default:
inicioX++;
descripcionScript += tecla;
cout << tecla;
break;
}
}   
while(!guardar);

Dime qué opinas del código, qué se podría mejorar y cosas así :)
Saludos ^^
¿Cuando guardas te acaba la posibilidad de escribir?
Yo haria que se pueda guardar cuando quieras, pero cuando apriente ESC se acabe la opcion de escribir y vuelvas a tu menu inicial.
¡Cuidate!

Desconectado Warlox

  • Moderadores PHP
  • PHPero Master
  • ****
  • Mensajes: 1.278
  • Karma: 77
  • Sexo: Masculino
  • A veces hay que aprender a correr antes de caminar
    • Ver Perfil
    • Página personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #10 en: 23 de Noviembre de 2010, 19:53:05 pm »
Sí, es que lo hice de esa manera xD... es para un ScriptManager, que apenas termine lo publico acá en PHPeros :D
- Moderador de PHP


Desconectado gink

  • PHPer@ Fijo
  • ***
  • Mensajes: 146
  • Karma: 10
  • Sexo: Masculino
    • Ver Perfil
    • Mi blog personal
Re:[DUDA] Combinación de teclas y cambiar color a textos
« Respuesta #11 en: 23 de Noviembre de 2010, 20:39:13 pm »
Sí, es que lo hice de esa manera xD... es para un ScriptManager, que apenas termine lo publico acá en PHPeros :D
Vi en tu codigo que lo de escribir funcionaba hasta que se guarde :P jaja

Dale, sera buenísimo probarlo :)