Comunidad Gambas-es
[SOLUCIONADO] Evento Key_Press - cambiar tecla sobre la marcha - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: [SOLUCIONADO] Evento Key_Press - cambiar tecla sobre la marcha (/thread-994.html)

Páginas: 1 2


Evento Key_Press - cambiar tecla sobre la marcha - tincho - 17-08-2022

Hola a todos.
¿Es posible cambiar la tecla pulsada en el evento Key_Press a "siempre mayúscula"?
Los ejemplos que encuentro son para detener el evento si la tecla no es la que se espera.
Pero si por ejemplo quiero que en un textbox independientemente de si el lock de mayúsculas esta activad o no siempre se agreguen letras mayúsculas, en caso que sea una minúscula la pulsada, que esta se convierta en mayúscula.
Los ejemplos habituales son de este tipo
Código:
PUBLIC SUB TextBox1_KeyPress()

IF key.Text <> upper(key.Text)


STOP EVENT

ENDIF

END

¿Pero como hacer algo que cambie el key.code?

Código:
PUBLIC SUB TextBox1_KeyPress()

IF key.Text <> upper(key.Text)

' Ahora uso esto pero es posible modificar directamente el valor de la tecla
Last.Text = Last.Text & Upper(Key.Text)
Stop Event

'key.code = ? 'como conseguir el código de la mayúscula
' ¿Esto de aquí arriba se puede hacer ?

ENDIF

END



RE: Evento Key_Press - cambiar tecla sobre la marcha - jguardon - 17-08-2022

Mayúsculas − A - Z  ASCII de 65 a 90
Minúsculas − a - z  ASCII de 97 a 122

Supongo que con unas pocas matemáticas puedes sumar y restar para obtener el código ascii correcto y convertirlo a keycode.

Saludos


RE: Evento Key_Press - cambiar tecla sobre la marcha - Shordi - 18-08-2022

Haciendo algunas pruebas a raíz de este hilo observo, extrañado, que mi gambas no levanta el evento keypress para las teclas normales (letras y números) y sólo lo hace para todas las demás, mayúsculas, control, función, enter, etc.

¿Es algo nuevo que se me ha pasado o debo preocuparme?

[System]
Gambas=3.17.3
OperatingSystem=Linux
Kernel=5.15.0-46-generic
Architecture=x86_64
Distribution=Linux Mint 21 Vanessa
Desktop=CINNAMON
Font=Ubuntu,10
Scale=7
Theme=mint-y-dark-pink
Language=es_ES.UTF-8
Memory=15827M


Saludos


RE: Evento Key_Press - cambiar tecla sobre la marcha - tincho - 18-08-2022

(17-08-2022, 23:22)jguardon escribió: Supongo que con unas pocas matemáticas puedes sumar y restar para obtener el código ascii correcto y convertirlo a keycode.

Gracias Jesús, seguramente se pueda hacer algo de eso. De todas maneas lo que me interesa saber es si se puede alterar el valor de KEY dentro del mismo evento.

(18-08-2022, 09:42)Shordi escribió: observo, extrañado, que mi gambas no levanta el evento keypress para las teclas normales

Es raro eso.


RE: Evento Key_Press - cambiar tecla sobre la marcha - Shordi - 18-08-2022

En raspberry pi con ubuntu budgie 21 y gambas 3.16.3, funciona como se esperaba.... Angry Angry


RE: Evento Key_Press - cambiar tecla sobre la marcha - tincho - 18-08-2022

Hice un sencillo ejemplo y en este en mi computadora levanta todas las teclas.
[System]
Gambas=3.17.3
OperatingSystem=Linux
Kernel=5.15.60-1-MANJARO
Architecture=x86_64
Distribution=Manjaro Linux
Desktop=XFCE
Font=Noto Sans,10
Scale=7
Theme=matcha-sea
Language=es_ES.utf8
Memory=7854M


RE: Evento Key_Press - cambiar tecla sobre la marcha - Shordi - 18-08-2022

He averiguado el problema: El puto GTK3. Cambiando a QT5, todo perfecto... señor, señor...

Esto es lo que intentaba probar... aunque no sé si se ajusta a lo que quieres hacer.

Código:
Public Sub ComboBox1_KeyPress()
 
  Stop Event
  ComboBox1.Text &= Upper(key.text)
 
End

No creo que puedas cambiar el valor de key.code, aunque siempre puedes parar el evento y usar SendKey(), supongo...

Saludos


RE: Evento Key_Press - cambiar tecla sobre la marcha - tincho - 18-08-2022

(18-08-2022, 10:27)Shordi escribió: No creo que puedas cambiar el valor de key.code, aunque siempre puedes parar el evento y usar SendKey(), supongo...

El problema es que en los casos en que el usuario intenta poner un caracter en en otra parte diferente del final de la cadena el método que uso yo y el que propones tu, también pone el caracter "nuevo" al final de la cadena.

Como se usa SendKey()?


RE: Evento Key_Press - cambiar tecla sobre la marcha - vuott - 18-08-2022

...para empezar_

https://gambaswiki.org/wiki/comp/gb.desktop/desktop/sendkeys

Un esemplo practico: cómo ejecutar con código Gambas un programa externo (por ejemplo "Gedit") desde Terminal.
1) Activar el componente gb.desktop.
2) Abrir el terminal.
3) encontrar el número de identificación (ID) de la ventana del Terminal (por ejemplo usando desde Terminal el comando "wmctrl -l").
4) mantener abierto el Terminal.
5) Ejecutar el siguiente código Gambas:
Código:
Public Sub Button1_Click()

' Asigna el "Focus" a la ventana del Terminal:
  Desktop.ActiveWindow = número_de_identificación_de_la_ventana_del_Terminal
  
  Desktop.SendKeys("gedit\n")   ' ...o el nombre exacto de otro programa

End



RE: Evento Key_Press - cambiar tecla sobre la marcha - Shordi - 18-08-2022

Se me adelantó el Cónsul con lo de SendKeys()

Para las inserciones de texto el código sería
Código:
Public Sub ComboBox1_KeyPress()

  Stop Event
  ComboBox1.Insert(Upper(Key.Text))

End

Saludos