Página 1 de 6

Motor de texto en basic.

Publicado: 28 Feb 2019, 12:20
por jordigahan
pues tengo una idea en mente y se me plantea un problema.
imaginar que estais usando el comando print, que habeis dibujado un cuadro en pantalla y que todo lo que escribas quieres que salga en ese cuadrado y que luego no se salga de ahi el texto.
ahy alguna forma de hacerlo?

Re: limitar espacio de escritura de caracteres

Publicado: 28 Feb 2019, 20:11
por javu61
En windows/linux/mac se soluciona usando una fuente con espaciado fijo, las mas usada son "Consola" o "Courier New". Hay un artículo sobre esto aqui.

Re: limitar espacio de escritura de caracteres

Publicado: 28 Feb 2019, 20:57
por otivax
Dependiendo del sistema u ordenador en el que estés plasmando tu idea, se pueden dar varías soluciones. Por ejemplo, usando un Canvas tanto en .Net como en Java Android puedes medir que ocupará el texto a dibujar y si excede las dimensiones que tú hayas fijado, lo puedes recortar, añadir otra línea, sustituir parte del texto con ..., o cambiar el tamaño de la Fuente a un valor más bajo.
En .net y hablando de memoria hay una función de un objeto Canvas llamada MeasureText que te devuelve esa info, en Java Android recuerdo que se llama igual.
Salu2.

Re: limitar espacio de escritura de caracteres

Publicado: 28 Feb 2019, 21:49
por jordigahan
se me olvido comentar que es para el basic del spectrum...

Re: limitar espacio de escritura de caracteres

Publicado: 28 Feb 2019, 22:24
por alvaroalea
Print a$( to n) imprime como mucho los n primeros caracteres de a$
Te sirve con eso?

Enviado desde mi MI PAD 3 mediante Tapatalk


Re: limitar espacio de escritura de caracteres

Publicado: 28 Feb 2019, 23:01
por otivax
Siendo para Spectrum y hablando de memoria, puedes hacer lo siguiente:
Variable numérica contador=0 y alfanumérica b$=""
Leer el teclado con inkey$
Guardar la tecla pulsada en una variable, por ejemplo a$
Si contador no ha alcanzado el máximo b$=b$+a$
Si contador ha alcanzado el máximo solo permitir carácteres ASCII 8 y 13
Si a$=chr$(8) borrar último carácter de b$
Si a$=chr$(13) ejecutar la pulsación de Intro
Imprimir b$ con PRINT AT en la posición adecuada.

A grandes rasgos te puede servir y repito que hablo de memoria. De intro sé seguro que era el 13 pero de borrar no recuerdo muy bien si es el 8 u otro.
Ya nos cuentas si te sirve.

Re: limitar espacio de escritura de caracteres

Publicado: 01 Mar 2019, 03:57
por jordigahan
alvaroalea escribió: 28 Feb 2019, 22:24 Print a$( to n) imprime como mucho los n primeros caracteres de a$
Te sirve con eso?

Enviado desde mi MI PAD 3 mediante Tapatalk
pues parece que funciona, pero si la frase tiene ma caracteres que el limite que le pongo, la corta y necesito que aparezca el resto de la frase en la parte de abajo.


10 let a$="ksdhkdskjhdksjhfkjsdhfkjshkjhfkshfksdhkfshkhfkdshkfhkshjd"
20 print at 1,1;a$ (to 23)

Re: limitar espacio de escritura de caracteres

Publicado: 01 Mar 2019, 08:06
por Radiosity
Necesitas un bucle. Tienes que dividir el texto de la cadena en cadenas mas pequeñas con la longitud del recuadro e imprimirlas en orden que las vas cortando. Puedes hacerlo mucho mas estetico si vas palabra por palabra, asi evitarias cortar palabras por la mitad y las cadenas quedarian cortadas en los espacios.

Re: limitar espacio de escritura de caracteres

Publicado: 01 Mar 2019, 09:26
por elfoscuro
Creo que sería algo así:

10 let a$="ksdhkdskjhdksjhfkjsdhfkjshkjhfkshfksdhkfshkhfkdshkfhkshjd"
20 for f=0 to len(a$)/23-1
30 print at f+1,1;a$ (f*23 to f*23+23)
40 next f

Revísalo, porque hace siglos que no toco el BASIC y estoy más que oxidado. Seguro que algún "23" no será correcto y me dejaré fuera algún caracter de la cadena ;-)

Re: limitar espacio de escritura de caracteres

Publicado: 01 Mar 2019, 12:11
por Radiosity
elfoscuro escribió: 01 Mar 2019, 09:26 Creo que sería algo así:

10 let a$="ksdhkdskjhdksjhfkjsdhfkjshkjhfkshfksdhkfshkhfkdshkfhkshjd"
20 for f=0 to len(a$)/23-1
30 print at f+1,1;a$ (f*23 to f*23+23)
40 next f

Revísalo, porque hace siglos que no toco el BASIC y estoy más que oxidado. Seguro que algún "23" no será correcto y me dejaré fuera algún caracter de la cadena ;-)
En emulador eso no parece que fuencione.