|
Página 1 de 1
|
Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Autor |
Mensaje |
lumbanico
Usuario
Registrado: Septiembre 2009
Mensajes: 23
Edad: 47
|
Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Hola,
Estoy comenzando en esto de gambas, y para familiarizarme estoy desarrollando una pequeña aplicación para la gestión de clientes. Pero lo que me trae aquí es que en el evento KeyPress de un cuadro de texto no me diferencia entre mayúsculas y minúsculas, entendiendo ambas como mayúsculas. El código, con el que limito en número de dígitos y el tipo, es el siguiente:
PUBLIC SUB TNif_KeyPress()
Establece los dígitos que se pueden introducir, y cuántos
SELECT CASE Key.code
CASE Asc("a") TO Asc("z")
IF Len(TNif.Text) > 8 THEN
STOP EVENT
ELSE
message("12")
'Convierte las minúsculas en mayúsculas
TNif.Insert(UCase(Key.Text))
STOP EVENT
END IF
CASE Asc("0") TO Asc("9")
IF Len(TNif.Text) > 8 THEN STOP EVENT
CASE Asc("A") TO Asc("Z")
IF Len(TNif.Text) > 8 THEN STOP EVENT
CASE key.BackSpace
CASE key.Delete
CASE key.Tab
CASE key.Enter
CASE key.Return
CASE ELSE
STOP EVENT
END SELECT
END
Actualmente estoy trabajando con Ubuntu 9.10 y Gamas 2.18, has antes de la actualización (tenía gambas 2.13 con Ubuntu 9.04) y no me daba problemas. ¿ A alguien le ha pasado esto ?. Muchas gracias.
|
#1 Lunes, 30 Noviembre 2009, 20:43 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Hola
Cometes un error al testear mediante códigos ascii porque en Linux esos valores pueden dar muy diferentes valores según el charset del sistema, el charset del escritorio, el entorno gráfico, ..., etc
Para testear el teclado gambas propone la clase key que permite acceder a un caracter o su código sin necesidad de acceder al código ascii que trae problemas.
En vez de ASC("A") usa key["A"]
La clase key
Además gambas proporciona una serie de funciones para testear el teclado
Citar:
IsAscii Comprueba si una cadena contiene sólo caracteres ASCII.
IsBlank Comprueba si una cadena contiene sólo caracteres de espacio o tabulaciones.
IsDigit Comprueba si una cadena contiene sólo dígitos.
IsHexa Comprueba si una cadena contiene sólo dígitos hexadecimales.
IsLCase Comprueba si una cadena contiene sólo letras minúsculas.
IsLetter Comprueba si una cadena contiene sólo letras.
IsPunct Comprueba si una cadena contiene sólo caracteres no alfanuméricos representables.
IsSpace Comprueba si una cadena contiene sólo caracteres de espacio.
IsUCase Comprueba si una cadena contiene sólo letras mayúsculas.
Funciones de testeo del teclado
Por último verás que gambas no detecta la ñ como letra por ejemplo así que puedes tener algún problema al testear el teclado. Por eso yo me hice una clase que me sirviera para testearlo adecuadamente. Para que tomes como ejemplo te pongo una rutina de keypress
Y aquí te pongo las funciones que yo tengo en la clase TEC y que me sirven para testear el teclado adecuadamente:
Esta función devuelve true si es letra incluyendo la ñ o la Ñ
Esta función devuelve TRUE si es Ñ o ñ
Esta función devuelve true si es letra, signo de puntuación o si es espacio. Es práctica para escribir direcciones y cosas así.
Esta función devuelve true si se ha pulsado tecla válida para un campo de fecha (números, punto, barra o dos puntos)
Ojo con esta función porque en ella permito que para meter fechas se puedan utilizar el separador punto, el dos puntos o la barra, pero luego para comprobar si lo introducido es una fecha válida (el isdate de vb) hay que poner la fecha en formato ingles (mm/dd/yyyy) y el separador debe ser la barra o te dará error. Yo permito que el usuario escriba la fecha como quiera, pero luego llamo a una función que convierte la fecha al formado adecuado y lo dejo en el tag. Así un textbox de pedir fecha llamado DESDE yo llamo a esta función y el resultado lo dejo en DESDE.TAG.
PUBLIC FUNCTION cfecha(f AS String) AS String
DIM fe AS String[], del AS String
del = IIf(IsDigit(Mid(f, 3, 1)), Mid(f, 2, 1), Mid(f, 3, 1))
fe = Split(f, del)
f = fe[1] & "/" & fe[0] & "/" & fe[2]
RETURN f
END
Como ves averiguo el separador que se usó y separo en dias, meses y años. Luego los pongo en el orden adecuado y les pongo el separador / que es el que funciona bien con isdate. Así cuando quiero saber si es una fecha válida en vez de preguntar isdate(desde.text) pregunto isdate(desde.tag) y ya está.
Esta función devuelve TRUE si se han pulsado teclas de borrado (delete o backspace)
Esta función devuelve TRUE si se han pulsado teclas del cursor
última edición por soplo el Lunes, 30 Noviembre 2009, 22:15; editado 1 vez
|
#2 Lunes, 30 Noviembre 2009, 22:12 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Viejo, ha estudiar un poquito más que por algo está el libro de gambas en la sección de descargas, ¿si?
Otra cosa: REFACTORING
No explico el código que sigue porque me parece que es totalmente autoexplicativo.
=================== Cómo programar con Gambas
Speed Books: informática libre.
|
#3 Martes, 01 Diciembre 2009, 02:32 |
|
|
lumbanico
Usuario
Registrado: Septiembre 2009
Mensajes: 23
Edad: 47
|
Re: Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Fantástico, muchas gracias por todo.
|
#4 Martes, 01 Diciembre 2009, 08:26 |
|
|
jcontasti
Usuario
Registrado: Enero 2010
Mensajes: 25
Edad: 43
|
Re: Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Viejo, ha estudiar un poquito más que por algo está el libro de gambas en la sección de descargas, ¿si?
Otra cosa: REFACTORING
No explico el código que sigue porque me parece que es totalmente autoexplicativo.
Buenas noches fabianFv gracias por tu aporte estoy tratando de hacer un pequeño modulo que me verifique la inactividad de los ocntroles en un formulario, es decir, quiisera saber cuando un textbox esta activo o hay algun evento (Delete,Badscape, Tab,etc) este activo, sino hay ningun evento activo se me dispare un timer con un contador de 3minutos y est me cierre le formulario, podrias ayudarme he tratado con tu ejemplo pero no lo he logrado. gracias de antemano
|
#5 Domingo, 05 Diciembre 2010, 04:08 |
|
|
gara_pm
Usuario
Registrado: Octobre 2011
Mensajes: 29
Edad: 38 Ubicación:
|
Re: Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Yo hice lo siguiente en este caso usando el ejemplo de Fabian pero usando una clase estatica. Es un poco antiguo el tema pero queria ver en como lo puedo mejorar para ver si me entregan alguna ideas, comentare algo sobre los metodos utilizados.
El metodo Clean lo que hace es limpiar los objetos textbox, combobox y treeview de los cuales existan en un formulario
El metodo Name lo utilizo cuando necesite registrar nombre que sea en mayuscula y letra con ñ en un control ya sea combobox o textbox
El metodo Value es para incluir solo numeros en algun control [/list]
|
#6 Lunes, 11 Febrero 2013, 04:29 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
Re: Posible Bug En El Evento KeyPress Del Cuadro De Control ?
Viejo, ha estudiar un poquito más que por algo está el libro de gambas en la sección de descargas, ¿si?
Otra cosa: REFACTORING
No explico el código que sigue porque me parece que es totalmente autoexplicativo.
No nos olvidemos que con "With Key" puedes ahorrarte otros 60 caracteres, y posiblemente una loc más.
jcontasti escribió:
Buenas noches fabianFv gracias por tu aporte estoy tratando de hacer un pequeño modulo que me verifique la inactividad de los ocntroles en un formulario, es decir, quiisera saber cuando un textbox esta activo o hay algun evento (Delete,Badscape, Tab,etc) este activo, sino hay ningun evento activo se me dispare un timer con un contador de 3minutos y est me cierre le formulario, podrias ayudarme he tratado con tu ejemplo pero no lo he logrado. gracias de antemano
Volviendo al tema, puedes usar la propiedad Group en la IDE para que todos los controles ejecuten el mismo evento, en este caso Change (que por cierto, no sera ejecutado si no pasa la validacion en KeyPress). La mejor forma es hacer que el Timer empiece a correr al abrir el formulario y hacer que se resetee a 180.000 ms = 180 s = 3min. En el evento _Timer, simplemente se lo detiene y se cierra el formulario.
Por otra parte:
soplo escribió:
Cometes un error al testear mediante códigos ascii porque en Linux esos valores pueden dar muy diferentes valores según el charset del sistema, el charset del escritorio, el entorno gráfico, ..., etc
Eso no es correcto. Un carácter US-ASCII conserva su valor en cualquier sistema. Hago énfasis en esto porque si su valor (binario, decimal, hexadecimal), cambiara, la Internet seria literalmente imposible, ya que la mayoría de las especificaciones no actualizadas en los últimos años aún depende de este conjunto de caracteres. Aquí puedes ver un documento donde de explica en forma completa que caracteres abarca y que valores toman.
Si bien aún es usado, su uso fue superado por UTF-8 en el 2007. Esto se debe a que US-ASCII solo reconoce 128 caracteres (siendo muchos de control, como \n o \r y muy pocos imprimibles), mientras que UTF-8 reconoce hasta 1,112,064 caracteres (este número tuvo que ser limitado por razones de compatibilidad, pero sabiendo que UTF-8 utiliza 6 bytes -> 8*6=48, 2^48=un código por cada carácter que existió en la vida del hombre)
Por cierto, sabiendo que todos aquí hablamos español, y que los caracteres con acentos no están dentro de US-ASCII, siempre deberíamos usar String.Code() en lugar de Asc()
Espero que la info les sea útil!
Saludos!
|
#7 Lunes, 11 Febrero 2013, 08:31 |
|
|
|
Temas parecidos
Temas parecidos
Tema |
Autor |
Foro |
Respuestas |
último mensaje |
|
Control De Evento Usando Last SOLUCIONADO
|
ljma |
Aplicaciones/Fragmentos de Código |
5 |
Miercoles, 22 Febrero 2012, 23:00 ljma |
|
Evento Click En El Control ListBox
|
datobinario |
General |
14 |
Miercoles, 13 Marzo 2013, 23:12 datobinario |
|
Evento Select,Evento Activate, Evento Mous...
|
Shell |
General |
1 |
Domingo, 18 May 2014, 09:34 Shell |
|
¿Cual Es El Evento Donde Se Crea Y Carga ...
|
gambafeliz |
Controles/Librerías/Componentes |
7 |
Sabado, 21 Septiembre 2019, 16:00 gambafeliz |
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|