• Domingo 15 de Diciembre de 2024, 11:44

Autor Tema:  Tecla De Retroceso  (Leído 1674 veces)

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Tecla De Retroceso
« en: Lunes 6 de Junio de 2005, 22:27 »
0
/* tengo una funcion para captura de datos en modo texto, todo trabaja bien pero ahi un detalle q' no puedo resolver (ya la cabeza la tengo overclokeada)... :ph34r:
Código: Text
  1.  
  2. #include "cscreen.h"
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. ...
  8.  
  9. /* SetUpper */
  10. int SetUpper(int x,int y,int nColor,int nSize,int bSpecialChr,char *lpszString)
  11. {
  12. CScreen Scr;
  13. unsigned char nMaxx;
  14. unsigned char nMaxy;
  15. int nChr=0;
  16. int bFlag;
  17. int i;
  18. int j;
  19.  
  20. /* validaciones de posicion donde se va a imprimir el texto ,color,bla bla bla...*/
  21.   Scr.GetMaxx(nMaxx);
  22.   Scr.GetMaxy(nMaxy);
  23.   if (x<1) x=1;
  24.   if (x>=nMaxx) x=nMaxx-1;
  25.   if (y<1) y=1;
  26.   if (y>=nMaxy) y=nMaxy-1;
  27.  
  28.   if ((nColor<0)||(nColor>15)) nColor=15;
  29.   if (nSize<0) nSize=0;
  30.   if (nSize>((nMaxx+1)-x)) nSize=x-1;
  31.  
  32.   memset(lpszString,' ',nSize);
  33.   textcolor(nColor);
  34.  
  35.   i=0;
  36.   j=0;
  37.   do
  38.   {
  39.     gotoxy(x+j,y);
  40.     do
  41.     {
  42.       bFlag=0;
  43.       lpszString[i]=getch();
  44. /* si presiona ESC o ENTER salir */
  45.       if (lpszString[i]==13) bFlag=2;
  46.       if (lpszString[i]==27)
  47.       {
  48.         bFlag=2;
  49.         nChr=(int)lpszString[i];
  50.       }
  51. /* caracteres validos */
  52.       if (lpszString[i]== 8) bFlag=1;
  53.       if (lpszString[i]==32) bFlag=1;
  54.       if (lpszString[i]==45) bFlag=1;
  55.       if (lpszString[i]==95) bFlag=1;
  56.  
  57.       if ((lpszString[i]>=97) && (lpszString[i]<=122))
  58.         lpszString[i]=lpszString[i]-32;
  59.  
  60.       if ((lpszString[i]>=48) && (lpszString[i]<=57)) bFlag=1;
  61.       if ((lpszString[i]>=65) && (lpszString[i]<=90)) bFlag=1;
  62. /*otros caracteres eventualmente validos(segun el valor parametro correspondiente)*/
  63.       if (bSpecialChr)
  64.       {
  65.         if (lpszString[i]==46 ) bFlag=1;
  66.         if (lpszString[i]==47 ) bFlag=1;
  67.         if (lpszString[i]==123) bFlag=1;
  68.         if (lpszString[i]==125) bFlag=1;
  69.         if (lpszString[i]==126) bFlag=1;
  70.  
  71.         if ((lpszString[i]>=33) && (lpszString[i]<=44)) bFlag=1;
  72.         if ((lpszString[i]>=58) && (lpszString[i]<=64)) bFlag=1;      
  73.         if ((lpszString[i]>=91) && (lpszString[i]<=94)) bFlag=1;
  74.       }      
  75.     }/*no deja continuar hastar que ingrese un put.. caracter valido >:<(*/
  76.     while (!bFlag);
  77.  
  78.     if ((bFlag==1) && (i<=nSize))/*si por fin ingreso el put.. caracter |:(*/
  79.     {/*
  80.  
creo que el asunto esta por aqui ya que debe ubicarse una posicion atras con respecto  al eje en x si i e j>0,Ok
lo que sucede es que por ejemplo:
tengo tecleado

aa


y tecleo <-
a[eliminado OK:)]

y tecleo <-
[eliminado tambien OK :)]

y tecleo nuevamente no se debe mover <-
no DEBE HACER NADA ! ):(

Y EL PUT..
se desplaza hacia la derecha(imprime un  caracter 32)

...?
ayudenmen que estoy haciendo varias cosas mas, y con este no doy. lo mas posible es que sea un error idiota de logica pero ya no se
Código: Text
  1.  
  2. */
  3.       if ((lpszString[i]==8) && (j&#62;0) && (i&#62;0))
  4.       {
  5.   j=j-1;
  6.   i=i-1;/* borra el caracter de forma logica ¿?..bueno(si tecleo la tecla de retroceso )*/
  7.   gotoxy(x+j,y);cprintf(&#34; &#34;);/* borra en pantalla */
  8.       }
  9.       else
  10.       {/* e imprime en pantalla :) */
  11.   cprintf(&#34;%c&#092;0&#34;,lpszString[i]);
  12.   j=j+1;
  13.   i=i+1;
  14.       }
  15.     }
  16.   }
  17.   while ((bFlag==1) && (i&#60;=nSize));
  18.   lpszString[i]='&#092;0';/*le agrega el fin de linea*/
  19.  
  20. return nChr;
  21. }
  22.  
  23. main()
  24. {
  25. char *s;
  26. int x;
  27.  
  28. clrscr();
  29. x=SetUpper(1,1,15,10,0,s);
  30.  
  31. printf(&#34;&#092;n%s&#34;,s);
  32. getch();
  33. return 0;
  34. }
  35.  

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Tecla De Retroceso
« Respuesta #1 en: Martes 7 de Junio de 2005, 20:07 »
0
Problema resuelto: :jumpie:
Código: Text
  1.  
  2. //era cuestion de agregar  esta linea &#34; if (lpszString[i]!=8)&#34;
  3.  
  4.    if ((bFlag==1) && (i&#60;=nSize))
  5.     {
  6.       if ((lpszString[i]==8) && (j&#62;0) && (i&#62;0))
  7.       {
  8.         j=j-1;
  9.         i=i-1;
  10.         gotoxy(x+j,y);cprintf(&#34; &#34;); :beer:
  11.       }
  12.       else
  13.       {
  14.        // aqui-&#62;if (lpszString[i]!=8) y listo
  15.         {
  16.           cprintf(&#34;%c&#092;0&#34;,lpszString[i]);
  17.           j=j+1;
  18.           i=i+1;
  19.         }
  20.       }
  21.     }
  22.  
:bravo:

 &lt;_&lt;

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Tecla De Retroceso
« Respuesta #2 en: Martes 7 de Junio de 2005, 20:49 »
0
por favor usa los tags CODE o XCODE  pra diferenciar tu codigo del resto del texto
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Tecla De Retroceso
« Respuesta #3 en: Miércoles 8 de Junio de 2005, 00:20 »
0
Entendido :whistling:   :smartass: