• Jueves 28 de Marzo de 2024, 23:14

Autor Tema:  Tecla  (Leído 2394 veces)

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Tecla
« en: Domingo 26 de Junio de 2005, 02:26 »
0
hola tengo un par de consultas para ver si me pueden dar su apoyo en eso. ok estoy haciendo un tercer proyecto en turbo c y estoy trabajando en la parte del menu y ya he hecho menus anteriormente pero trabajandolo de la forma de colocar una letra o un número, y ya quería cambiar eso a usar las letras pero con la tecla control o shift por ejmplo si presiono "control + a" me llame una opción, he estado revisando y encontre las funciones kbhit  que pertenece a conio y la funcion bioskey que pertenece a bios.h
si esto se puede de la forma que digo me podrian enseñar un ejmplo como se usan esas funciones por favor?. y la otra es que si estoy en una opcion donde estoy usando for,while,etc en donde quiera terminar el proceso con que presione una tecla como esc , me termine el proceso y me lleve al menu principal. hasta al momento encontré que por defecto se puede hacer es con el control + c pero lo que hace es k me termina la aplicación por completo.
Por si acaso se confunde la ayuda que pido con que me hagan la tarea, le digo que no es asi pork ya lo que me piden está hecho solo pretendo aprender un poco mas ,muchas gracias y saludos.
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Tecla
« Respuesta #1 en: Domingo 26 de Junio de 2005, 14:46 »
0
haz un programa chico que te capture los códigos con getch, los imprimes en pantalla todo dentro un ciclo que termine cuando el caracter sea el 27 (escape). Cuando presiones ctrl+'A' o alt+'a' aparecerán códigos distintos a los que aparecerían simplemente apretando 'a'. Muchos códigos (incluyendo los alt+tecla) empiezan con '0' (te vota un 0 primero), indicando que hay que leer el siguiente byte para capturar el caracter extendido.

Un ejemplo que viene con el compilador "turbo c":
Código: Text
  1.  
  2. int main(void)
  3. {
  4.    int c;
  5.    int extended = 0;
  6.    c = getch();
  7.    if (!c)
  8.      extended = getch();
  9.    if (extended)
  10.      printf("The character is extended\n");
  11.    else
  12.      printf("The character isn't extended\n");
  13.  
  14.    return 0;
  15. }
  16.  
  17.  

sruby

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Tecla
« Respuesta #2 en: Lunes 4 de Julio de 2005, 16:55 »
0
Código: Text
  1. ...en donde quiera terminar el proceso con que presione una tecla como esc , me termine el proceso y me lleve al menu principal. hasta al momento encontré que por defecto se puede hacer es con el control + c pero lo que hace es k me termina la aplicación por completo.
  2.  

Lo que puedes hacer para que al apretar Control+C no se termine el programa es generar una nueva Rutina de Servicio de Interrupción. En otras palabras decirle que haga tal cosa cuando se aprete Control+C.

Para hacer esto debes llamar a la funcion ctrlbrk().

Aqui te envio un codigo donde se realiza esto:

Código: Text
  1. #include <stdio.h>
  2. #include <dos.h>
  3.  
  4. int rsi_break(void)
  5.  
  6. main ( )
  7. {
  8. unsigned long int i;
  9. clrscr();
  10. ctrlbrk(rsi_break)&#59;    /* Se apunta a la nueva RSI rsi_break*/
  11.  
  12. for (i=0&#59;i<100000&#59;i++){          /* Bloque de retardo en espera de la interrupción*/
  13. gotoxy(35,10); printf(“%ld”,i);
  14. }
  15. printf(“ : Se Termino”);
  16. return(0);
  17. }
  18.  
  19. int rsi_break( void)
  20. {
  21. gotoxy(20,15),printf (“soy el nuevo manejador de CTL-C”)&#59;
  22. return (1)&#59;      /* retornando uno prosigue el programa principal*/
  23. }
  24.  
  25.  


Saludos y ojala te sirva de algo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Tecla
« Respuesta #3 en: Lunes 4 de Julio de 2005, 17:06 »
0
Tambien podes usar la funcion signal que es ANSI:
http://www.cs.cf.ac.uk/Dave/C/node24.html

 :whistling:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

hzigma

  • Miembro activo
  • **
  • Mensajes: 30
    • Ver Perfil
Re: Tecla
« Respuesta #4 en: Jueves 28 de Julio de 2005, 18:15 »
0
Hola, la verdad cuando use estas funciones me ayudaron mucho a hacer lo que quieres hacer, la funcion kbhit se usa en en ciclo y la respuesta que da es si alguna tecla o combinacion de teclas es pulsada, luego se ingresa al ciclo y con bioskey se solicita el valor en numero de la tecla o conbinacion de teclas pulsadas, estos numeros son mayores a 255, es decir que no son codigos ascii.

Código: Text
  1.  
  2. int i;
  3. for(;;)
  4. {
  5.    if(kbhit())
  6.    {
  7.       i=bioskey();
  8.       if(i="Numero de la conbinacion")
  9.          //Codigo deseado
  10.          exit(0); // Para terminar el programa.
  11.    }
  12. }
  13.  
  14.  

HZIGMA :lightsabre: