// la palabra extern es porque estas funciones pertenecian a una libreria mia. /*.........................................................................*/ // Autor: Eider. extern long leer_numero_long(int XM,int YM, int maxlength, int color_txt, int color_f) { char numero='1', aux[1]; //numero sera donde guardemos el caracter leido char buffer_local[10]; //buffer_local, contendra toda nuestra cadena int a; struct textsettingstype txtsett; //estructura para guardar los tipos actuales gettextsettings(&txtsett); /*guardo los tipos actuales*/ settextstyle(SMALL_FONT, HORIZ_DIR, 5); rectangle(XM-1, YM+altocar-1, 9+XM+maxlength*anchocar, YM+altocar+15); setcolor(color_txt); setfillstyle(SOLID_FILL, color_f); bar(XM, YM+altocar, 8+XM+maxlength*anchocar, YM+altocar+14); //aqui realmente empieza lo bueno: a=0; while(numero != '\r') { while(!kbhit()) if(a=48 && numero<=57 && a 0) { //si presiono backspace-> borrar anterior a--; aux[0]= buffer_local[a]; aux[1]= '\0'; setcolor(color_f); bar(3+XM+a*anchocar, YM+altocar+2, 16+XM+a*anchocar, YM+altocar+14); buffer_local[a]='\0'; } } buffer_local[a]='\0'; /*se recuperan los tipos que se estaban usando antes*/ settextstyle(txtsett.font, txtsett.direction, txtsett.charsize); setcolor(texto); return(atol(buffer_local)); } /*.........................................................................*/ //esta es otra forma de verlo, solo que tienes la posibilidad de parametrizar un mensaje //que sera el titulo o rotulo. // Autor: Eider. extern float leer_numero_float(char* puntero_mensaje,int XM,int YM, int maxlength, int color_t, int color_txt, int color_f) { char numero='1', aux[1]; char buffer_local[10]; int a; short punto= 0; struct textsettingstype txtsett; gettextsettings(&txtsett); /*guardo los tipos actuales*/ settextstyle(SMALL_FONT, HORIZ_DIR, 5); // aqui va el titulo del formato setcolor(color_t); outtextxy(XM,YM-3,puntero_mensaje); rectangle(XM-1, YM+altocar-1, 9+XM+maxlength*anchocar, YM+altocar+15); setcolor(color_txt); setfillstyle(SOLID_FILL, color_f); bar(XM, YM+altocar, 8+XM+maxlength*anchocar, YM+altocar+14); //y aqui empieza lo bueno otra vez. a=0; while(numero != '\r') { while(!kbhit()) if(a=48 && numero<=57) { setcolor(color_f); outtextxy(3+XM+a*anchocar, YM+12, "³"); buffer_local[a]=numero; aux[0]= numero; aux[1]= '\0'; setcolor(color_txt); outtextxy(3+XM+a*anchocar, YM+12, aux); a++; } if( numero == '.' && !punto ) { //si presiona el punto, debe presionarlo una vez. setcolor(color_f); outtextxy(3+XM+a*anchocar, YM+12, "³"); buffer_local[a]=numero; aux[0]= numero; aux[1]= '\0'; setcolor(color_txt); outtextxy(3+XM+a*anchocar, YM+12, aux); punto=a; a++; } } if( numero=='\b'&& a>0) { //aqui debemos verificar si borro un punto si es asi, debemos actualizar a punto. a--; if(a==punto) punto=0; aux[0]= buffer_local[a]; aux[1]= '\0'; setcolor(color_f); bar(3+XM+a*anchocar, YM+altocar+2, 16+XM+a*anchocar, YM+altocar+14); buffer_local[a]='\0'; } } buffer_local[a]='\0'; /*se recuperan los tipos que se estaban usando antes*/ settextstyle(txtsett.font, txtsett.direction, txtsett.charsize); setcolor(texto); return(atof(buffer_local)); } de esta forma y consultando la ayuda de tu compilador para saber como pasar un cierto tipo numerico a una cadena de caracteres, puedes hacer lo que quieras con el modo grafico... las funciones mas usadas son: itoa -> entero a cadena. ltoa -> long a cadena. atol -> cadena a long. atof -> cadena a float. despues puedes usar funciones como strcpy y gcvt. para escribirlas en modo grafico. ej: strcpy(est.nombre_est, leer_cadena("", 210, 150, 19, ROJO, AZUL, GRIS_CLARO)); gcvt(ficha.prom_pond, 2, aux); outtextxy(285, 220, aux);