Grandamakulo   15-12-2023, 12:38
#1
Hola, compañeros:
Pues lo del asunto. En un TextArea —y afines, como TextEdit— no logro interceptar el evento KeyPress o el Key Release.
Pongo un ejemplo supersencillo:
Código:
' Gambas class file

Public txeTexto As New TextArea(Me)

Public Sub _new()

  Me.Arrangement = Arrange.Fill

End

Public Sub txeTexto_KeyPress()

  Me.Caption = Key.Code

End

No hay manera de que funcione, aun cambiando la configuración:
Código:
gb.form
gb.gui
gb.image
O:
Código:
gb.form
gb.image
gb.qt5
Incluso cambiando gui por gtk3 directamente.
Seguro que es una chorrada, pero no doy con ello.
Muchas gracias de antemano.
Última modificación: 15-12-2023, 12:46 por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
vuott   15-12-2023, 15:00
#2
No es chorrada: tengo el mismo problema desde hace muchas semanas !

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shell   15-12-2023, 16:09
#3
Parecéis de primero.    =8-O
 
(15-12-2023, 15:00)vuott escribió: No es chorrada: tengo el mismo problema desde hace muchas semanas !

Pero legatus Vuott!!. Huh

Ale, ya funciona. Si no tenéis un manipulador de eventos, ¿ cómo quieres que funcione ?.


Código:
Public txeTexto As New TextArea(Me) As "Manipulador"

Public Sub _new()

  Me.Arrangement = Arrange.Fill

End

Public Sub Manipulador_KeyPress()
 
  Me.Caption = Key.code
 
End

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   15-12-2023, 21:09
#4
Consul,
Tengo este problema más allá del código expuesto aquí.
No se el porqué. Sad
Última modificación: 15-12-2023, 21:10 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shell   15-12-2023, 22:34
#5
(15-12-2023, 21:09)vuott escribió: Tengo este problema más allá del código expuesto aquí.

Pues comenta el problema en el foro, sube un ejemplo que no te funcione y que podamos reproducirlo en nuestro ordenador.
Así lo vemos varios y tienes una idea aproximada de la magnitud del problema. Al menos los que "tenemos" interés aún en
participar. Rolleyes

Por cierto el nombre del manipulador de evento, puede ser perfectamente el nombre del control que es como solemos verlo
por defecto.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Grandamakulo   18-12-2023, 14:21
#6
Sí, es cierto lo del manipulador —las prisas no son buenas consejeras, me puse a simplificar el código lo más posible para centrarnos en el problema—, pero, tal cual dice nuestro frater, incluso así, no funciona como debe.
Ahora sí, pongo el ejemplo completo en el archivo que adjunto Smile.
No funciona con qt5.ext para el TextEdit —que no TextEditor—. Si cambiamos el editor a un TextArea —y no usas las funciones del editor, que darían error— y usas gtk3 ocurre que sólo intercepta algunas. Para que lance el evento con todas las teclas, tienes que poner un punto de interrupción al comienzo del evento, pulsar una tecla especial como mayúsculas o una tilde y tras parar en la primera vuelta, luego quites el punto de interrupción y le des a continuar la ejecución. Una cosa muy rara, de verdad.
Archivos adjuntos
.gz
Editor_Sin_Distracciones.tar.gz (Tamaño: 32.63 KB Descargas: 2)
Última modificación: 18-12-2023, 14:29 por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
Shell   19-12-2023, 00:05
#7
(18-12-2023, 14:21)Grandamakulo escribió: pero, tal cual dice nuestro frater, incluso así, no funciona como debe.

Era algo sencillo.

Si Vuott lo dice, es por algo. Pero no ha especificado el donde y el como.
En tu caso, si lo has hecho. Aunque resulta bien raro.

Entonces lo que os quejáis es que falla con controles concretos.
Lo pruebo.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   19-12-2023, 01:55
#8
He creado un ejemplo con el evento KeyPressed usado en un TextEdit
Debería ser indiferente.

Se trata de esto:

Código:
Private unaclase As Class
Private asimbolos As String[]
Private TextEdit1 As TextEdit

Public Sub Form_Open()

  unaclase = Class.Load("Key")
  asimbolos = unaclase.Symbols.Sort()

  Me.Text = ""
  TextEdit1 = New TextEdit(Me) As "TextEdit1"
  TextEdit1.Expand = True

End


Public Sub TextEdit1_KeyPress()

  Dim simbolo As String

  For Each simbolo In asimbolos
    If Key[simbolo] = Key.Code Then Me.Caption = simbolo
  Next

End

Key[simbolo] devuelve el valor del simbolo de la clase Key.
Así que lo que hace es comparar el valor de Key.Code con lo que representa key[simbolo], si coincide lo muestra y
y te dice la tecla que se debió pulsar. Ejemplo F1, Return, Up...etc. Pero lo cierto es que no funciona con todas
las teclas.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.