Comunidad PHPeros

Lenguajes => C / C++ => Mensaje iniciado por: Warlox en 21 de Noviembre de 2010, 19:52:18 pm

Título: [DUDA] Combinación de teclas y cambiar color a textos
Publicado por: Warlox 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 ^^
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: CarlosRdrz 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!
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: Warlox 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:

(http://i54.tinypic.com/m38dd.png)

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 ^^
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: CarlosRdrz 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!
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: gink 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!
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: Farresito en 22 de Noviembre de 2010, 22:43:12 pm
Echa un vistazo a esto ;): Creo que es lo que buscas :D

http://www.espaciolinux.com/foros/programacion/leer-una-pulsacion-del-teclado-t5147.html
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: Warlox 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
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: gink 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.
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: Warlox 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 ^^
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: gink 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!
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: Warlox 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
Título: Re:[DUDA] Combinación de teclas y cambiar color a textos
Publicado por: gink 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 :)