[CODE] KeyboardInput() - Entrada de texto por teclado.

Started by Erkosone, June 02, 2013, 05:23:25 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Erkosone

Hola gente, como muchos sabrán hace años se publicó en el número 8 de la revista DivMania una función llamada Vital Input la cual hasta día de hoy creo que no ha sido superada, esta función permitía en Div/Div2 entrar de manera correcta texto por teclado.


Lo que os comparto es la evolución de esta maravillosa función actualizada por mi, esto es lo que permite:


- Entrada de caracteres en MAYUSCULAS.
- Entrada de caracteres en minusculas.
- Entrada de números.
- Entrada de simbolos.
- Acentos.
- Acentos invertidos.
- Dieresis.
- Detecta interacción con teclas de cursor LEFT RIGHT permitiendo desplazarnos por el texto introducido.
- Detecta interacción con teclas especiales INICIO - FIN - SUPRIMIR - BACKSPACE.
- Totalmente controlada por timers para un correcto funcionamiento.


Es mi pequeño granito de arena a este campo tan dejado de la mano de dios XD.. espero que os sea utilidad  8)


NOTA: No es una copiada de la vital input XD.. el que la conozca verá que el código de esta nueva función está bastante mejor organizado y funciona de una forma completamente distinta, eso si, he mantenido el sistema de array de chars y array de ints por el rendimiento, en su día me pareció algo muy bien hecho y he decidido usar el mismo tipo de arrays para aumentar el performance al trabajar directamente con datos tipo INT en las comprobaciones.


Un saludo gente!

laghengar

Muchísimas gracias, viene que ni pintado. Karma.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Outlaw

Gracias Erko! Creo que me va a ser muy útil! Saludos!
"Life is cheap when the bounty is high"

Erkosone

Nada nada.. no se merecen jeje.. hay que compartir!

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Se me olvidó comentar..


Esta función no contiene código bloqueante que pueda interferir en la continua ejecución de cualquier aplicación o juego programada en bennuGD, así que si alguien necesita que no pare la ejecución del programa mientras se captura texto por teclado simplemente cambiar FUNCTION por PROCESS y ya está, se podrá ejecutar la aplicación normalmente y al mismo tiempo capturar desde el "proceso" keyboardInput() lo entrado por teclado.






Erkosone

He resubido el archivo, tenía un bug en el manejo de la tecla SUPR, lo que no se es como borrar el anterior..


El bueno es el que pone "fixed", algún administrador puede eliminar el anterior archivo??

Erkosone

Resubido de nuevo..
Había otro bug en los acentos, la ultima vocal "u" no se acentuaba.. ahora ya está todo arreglado.
A disfrutarla.

master

supongo que será porque uso ubuntu, pero a mí no me toma ninguno de los caracteres acentuados (ÁÉÍÓÚáéíóú), acentos invertidos(ÀÈÌÒÙàèìòù) diéresis (ÄËÏÖÜäëïöü) ni tampoco el circunflejo (ÂÊÎÔûâêîôû), tampoco me toma '¡+ḉ-?¿*Ç_ tampoco la ñÑ , el modificador Alt+(cualquier tecla) no me funciona.

Todos los demás como números, shift+número y letras mayúsculas y minúsculas si funcionan (también funcionan ,.;:).

De todo esto me surge una duda, ¿Como imprimes los caracteres ÁÍÓÚ si la fuente del sistema no tiene esos caracteres?

Erkosone

y quien ha dicho que la fuente de sistema no tiene esos chars? claro que los tiene, las que no los tienen bien colocados por que usan otra codificación de teclado son las fuentes compatibles con div que desgraciadamente no funcionan bien, la verdad es que no se si bennuGd tiene algún generador de fuentes para bennu concretamente.


Lo que comentas es bastante raro por que para que no diera problemas el código que dispara los FLAGS de los acentos está escrito con los pseudonimos de los códigos de teclado y no con los códigos directamente, lo hice así para evitar esto mismo.. pero es raro que no funcione.


El código que detecta si se ha pulsado la tecla de acento o dieresis es este, está al inicio del loop:



// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      if( key( _apostrophe ) )
         if( KEY(_L_SHIFT) OR KEY(_R_SHIFT) )
            dieresis = true;
            acento_normal = false;
         else
            acento_normal = true;
         end
      end
      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      if( key( _l_bracket ) )
         acento_invert = true;
      end


Como ves no hay ningún código de teclado directo, uso los nombres de los códigos de teclado que tiene bennu, es raro.. esto puede ser un bug de bennu en Ubuntu con la función KEY() ???

master

No tengo idea de porque no funcione.
Pero mencioné lo de las letras ÁÍÓÚ porque se supone que bennu usa una fuente CP437, y precisamente este codepage no tiene esos caracteres, por eso lo comenté.
Supongo que lo que hace es imprimir alguna letra que se parece. Estas son las letras internacionales del CP437

Çç
æÆ
âäàåá
ÄÅ
êëèé
É
ïîìí
ôöòó
Ö
ûùüú
Ü
ÿ
ñÑ

Te adjunto la salida de todos los caracteres desde benugd

master

Ya probé tu rutina en en windows, aquí si funciona. Solamente unos detalles:

1) cuando preciono la diagonal del teclado numerico (/), me aparece el signo de menos (-)
2) si presiono mayor que (>) y menor que(<) no aparece nada
3) no puedo escribir vocales con acento circunflejo.
4) cuando intento escribir una vocal mayuscula acentuada, me devuelve la minuscula acentuada.

Este ultimo punto (4), creo que será complicado resolverlo. ya que como mencioné arriba, la fuente por default de bennugd es CP437, y esta solo contiene estas variaciones de mayusculas: ÄÅÉÖÜ.

Erkosone

Vale te comento:


1 - El teclado numérico no está implementado, seguramente falle si pulsas otras teclas también.
2 - Los simbolos < > realmente no recuerdo si están, ahora lo reviso, gracias por el aviso sobre esto ;)
3 - Los acentos circunflejos tampoco los he implementado jeje.. no pensé que los usara nadie, pero los puedo añadir sin problema si hacen falta.
4 - Las vocales mayúsculas no están implementadas pero si hacen falta las puedo incluir también sin problema.


En definitiva, el teclado numérico no está disponible, puede salir cualquier cosa jeje.. pero todo lo demás es muy simple de añadir, me pongo a ello, haber si en un rato puedo resubir la función.
Gracias por el feedback ;)

Erkosone


Erkosone

Vocales MAYUSCULAS con acentos, acentos invertidos, diéresis y acento circunflejo añadido..  continuo con lo siguiente..