https://foro.gambas-es.org/viewtopic.php?f=1&t=2333
-----------------------------------
juancv
Miercoles, 02 May 2012, 23:09

Controlador De Teclado En Gambas 2 [solucionado]
-----------------------------------
En gambas 2 no consigo capturar las teclas pulsadas, si exceptuamos las teclas de función "F1", ...,"F12" "Mayús" "Avance", "Retroceso", etc.
Estoy probando en Gambas 3, y se comporta como cabría esperar.
Siguiendo el libro de Daniel Campos y José Luis Redrejo y el ManualBásico de Gambas 2 de realizado por JsbSan, pense incluir un controlador de teclado para evitar errores en la introducción de datos.

Como el ejemplo de ambos libros no conseguí que funcionen, busque en la web alguna sugerencia sobre algún error cometido por mi parte.
Tambien he buscado en el libro "A Beginner's Guide to GAMBAS" VERSIÓN 3 de John W. Rittinghouse y Jon Nicholson.

El resultado de todas las busquedas es que no puedo creer que los codigos de ejemplo no funcionen, así que pense en instalar Gambas 3 y probar los mismos ejemplos.
El resultado es que funcionan todos en Gambas 3.

Estoy sorprendido, y pienso que estos códigos no funcionan por algún error cometido por mí. Tal vez una libreria que no he instalado,o cualquier otro elemento. Tampoco no veo que se comente que no funcionen en gambas 2 dichos ejemplos.

Por todo ello si alguien tiene tiempo y puede darme una indicación al respecto os quedare muy agradecido.

Perdonar si he sido muy extenso.

				                                                   juancv

Os adjunto el código que estoy probando para limitar la entrada de teclado en unos textBox a números o letras según caso.





*****************************************************************************
Mi ordenador es un portatil Samsung R522 con las siguientes caracteristicas:

	Distribución		Ubuntu 10.04 lucid
	Entorno de escritorio	GNOME 2.30.2 (Ubuntu 2010-06-25)
	Núcleo			Linux 2.6.32-41-generic
	Plataforma		i686
	CPU			Intel(R) Core(TM)2 Duo CPU T6500 @ 2.10GHz
	Memoria			2.9 GB

	Gambas 2.19
*****************************************************************************


=============================================================================
Os adjunto el código que estoy probando

Los componentes del proyecto son:
	gb		Clases nativas internas
	gb.form		Más controles para componentes gráficas
	gb.gui		QT/GTK + intercambio de componentes

============================================================================
' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

END
-----------------------------------------------------------------------------
PUBLIC SUB TextBox1_KeyPress()
'Control de teclado introduciendo solo números
'*********************************************************
   'Este codigo que funciona en Gambas 3 aquí no hace nada
   
'se escriben todas las teclas que se pulsan
   
'*********************************************************
          SELECT CASE Key.Code
            CASE Key["0"] TO key["9"]     '0123456789
            CASE Key.Control AND Key["C"] 'control+C
            CASE Key.Control AND Key["X"] 'control+X
            CASE Key.Control AND Key["V"] 'control+V
            CASE Key.Left                 'izquierda
            CASE Key.Right                'derecha
            CASE Key.BackSpace            'borrar atras
            CASE Key.Delete               'borrar delante
            CASE Key.Tab                  'tabulador
            CASE key.Enter                'Enter
            CASE ELSE
              STOP EVENT
        END SELECT

END
-----------------------------------------------------------------------------
PUBLIC SUB TextBox2_KeyPress()
'***********************************************************
   'Este código en Gambas 3 funciona correctamente
   
   'Aquí solo funciona "CASE ELSE" como se comprueba con
   'Message ("Paso por Else"). Da igual que tecla pulses.

  SELECT CASE key.Code
      CASE 48 TO 57
      CASE key.BackSpace
      CASE key.Delete
      CASE key.Tab
      CASE ELSE 
         Message("Paso por Else")
         STOP EVENT 
  END SELECT 

END
-----------------------------------------------------------------------------
PUBLIC SUB TextBox4_KeyPress()
'Este código en Gambas 3 realiza lo que se espera
'*****************************************************************
   'La función Str(key.Code), cuando pulsas cualquier tecla "Letra" , 
   ' "Signo de puntuación" , o "número", nos retorna 0. 
   'Pero cuando pulsamos cualquier tecla como Tab=65289, 
   'Bloq May ús=65509 etc.nos devuelve un código
'*****************************************************************

  TextBox1.Text = "Has pulsado    " & Str(key.Code)

END
-----------------------------------------------------------------------------
PUBLIC SUB TextBox5_KeyPress()
   'Este código en gambas 3 realiza lo que se espera
   '**********************************************************
   'Aquí es como si no se hubiera escritoo nada
   '**********************************************************
     SELECT CASE Key.Code
            CASE Key["A"] TO key["Z"]     '0123456789
            CASE key["ñ"]
            CASE 209
            CASE 241
            CASE Key.Control AND Key["C"] 'control+C
            CASE Key.Control AND Key["X"] 'control+X
            CASE Key.Control AND Key["V"] 'control+V
            CASE Key.Left                 'izquierda
            CASE Key.Right                'derecha
            CASE Key.BackSpace            'borrar atras
            CASE key.Space
            CASE Key.Delete               'borrar delante
            CASE Key.Tab                  'tabulador
            CASE ELSE
              STOP EVENT
        END SELECT


END

PUBLIC SUB TextBox6_KeyPress()

  IF key.Code >= 65 AND key.Code <90>= 48 AND key.Code <= 57 THEN 
    ELSE IF key.Code = key.BackSpace THEN 
    ELSE IF key.Code = key.Delete THEN 
    ELSE 
      STOP EVENT 
  ENDIF

END


-----------------------------------
Shell
Miercoles, 02 May 2012, 23:30

Re: Controlador De Teclado En Gambas 2
-----------------------------------
Hola juancv:

Estoy buscando un programa que hace algo parecido a lo que quieres, pero no lo encuentro.

Encontré este.

Necesitaras dos textlabel, uno para mostrar "pulsa una tecla" y el otro para que te diga que pulsaste.
Puedes probarlo en gambas2.

[code linenumbers=false syntax=gambas]
PUBLIC SUB _new()

END

'Comprobamos que el envento de la tecla liberada para ver que hace
PUBLIC SUB form_KeyRelease()
  'Cuando una tecla sea liberada, comprueba el codigo
 SELECT CASE Key.Code
    CASE Key.Tab  'Si es la tecla tab
      TextLabel1.Text = "Código de la tecla: " & Key.Code & ", TAB."
    CASE Key.BackSpace  'Si es la barra de retroceso
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,Backspace."
    CASE Key.CapsLock 'Si es la tecla de fija mayusculas
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,BloqMayus."
    CASE Key.F1 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F1."
    CASE Key.F2 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F2."
    CASE Key.F3 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F3."
    CASE Key.F4 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F4."
    CASE Key.F5 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F5."
    CASE Key.F6 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F6."
    CASE Key.F7 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F7."
    CASE Key.F8 'o una tecla de función
      TextLabel1.Text = "Código de la tecla: " & Key.Code & " ,tecla F8."
    'Si ninguna de las de arriba son imprimibles?.Mostrar el codigo y el valor
    CASE ELSE 
      IF Key.Code > 32 AND Key.Code < 128 THEN 
        TextLabel1.Text = "Código de la tecla: " & Key.Code & " " & Chr(Key.Code)
      ELSE 'En otro caso solo el codigo
        TextLabel1.Text = "Código de la tecla: " & Key.Code
      ENDIF 
    END SELECT
END

'Comprobamos en el evento de la tecla presiona un filtro para shift,control,alt,etc
PUBLIC SUB form_KeyPress()  
  IF Key.Shift THEN 
    TextLabel1.Text = "Código de la tecla es: " & Key.Code & ", Mayusculas"
  ELSE IF Key.Alt THEN 
    TextLabel1.Text = "Código de la tecla es: " & Key.Code & ", Alt"
  ELSE IF Key.Control THEN 
    TextLabel1.Text = "Código de la tecla es: " & Key.Code & ", Control"
  ELSE IF Key.Code > 32 AND Key.Code < 128 THEN 
    TextLabel1.Text = "Código de la tecla: " & Key.Code & " " & Chr(Key.Code)
  ELSE IF Key.Esc THEN 
    TextLabel1.Text = "Código de la tecla es: " & Key.Code & ", Escape"
  ELSE 'En otro caso solo el codigo
    TextLabel1.Text = "Código de la tecla: " & Key.Code
  ENDIF 
END

PUBLIC SUB Form_Open()
  ME.Caption = " Operaciones de teclado "
END 
[/code]

Si no me equivoco lo saque del libro de "A Beginner's Guide to GAMBAS".

Seguiré mirando otros ejemplos.

Saludos.


-----------------------------------
Shell
Jueves, 03 May 2012, 00:12

Re: Controlador De Teclado En Gambas 2
-----------------------------------
Algo similar:

Otro ejemplo en gambas2.

[code linenumbers=false syntax=gambas]
PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
DIM mitextb AS TextBox

mitextb = NEW TextBox(ME) AS "cajadetexto"

WITH mitextb
   .Height = 25
   .Width = 168
   .x = 84
   .y = 28    
END WITH 

END


PUBLIC SUB cajadetexto_keypress()
  
  SELECT CASE Key.Code  
    CASE Key["0"] TO Key["9"]      
    CASE ELSE 
      STOP EVENT 
  END SELECT 

END
[/code]

Aunque el libro cubre hasta la 3. Los ejemplos se han quedado "casi" igual que otra versión del libro (A Beginner's Guide to GAMBAS)
Es recomendable que uses la versión 3 de Gambas.Pero puedes tener la 2 sin problema a la vez.Uso mas gambas2 que la 3.
Aunque no dudo en usar gambas3 si lo necesito.Convierto el código de una versión a otra.(mientras sea posible).

Gambas3 es el hoy y el futuro cercano.La versión con soporte y la ideal si no quieres quedarte atrás.
Gambas2 esta obsoleta.La ultima versión es la 2.24 y sera la ultima.

Saludos.


-----------------------------------
jguardon
Jueves, 03 May 2012, 00:17

Re: Controlador De Teclado En Gambas 2
-----------------------------------
Hola juancv y bienvenido

En principio no veo fallos en el código, aunque puedes ojear algún hilo dentro de estos foros en el que recuerdo se trató este tema hace ya bastante tiempo. Yo tengo código similar en una antigua aplicación de Gambas2 y funciona correctamente. Tiene que haber algo raro en tu proyecto, por ejemplo prueba usando [b]gb.qt[/b] en lugar de gb.gui o gb.gtk. Si así funciona, entonces es un bug en la implementación del gb.gtk en la versión de gambas2 que estés usando (que por cierto, no nos has indicado).

Ahora la pregunta del millón: ¿por qué preocuparse por Gambas2 cuando Gambas3 ya está disponible y lo reemplaza (y supera) completamente?

En poco tiempo Gambas2 irá desapareciendo de los repositorios, esto es una realidad. Lo que no entiendo es por qué nos empeñamos en seguir con un cadáver a nuestro lado y no migrar de una vez a Gambas3... Por otra parte, mientras que no se haga un uso masivo de Gambas3, será muy complicado descubrir posibles fallos para que se vayan solucionando cuanto antes.

En fin, otra vez pensando en voz alta...

Saludos


-----------------------------------
juancv
Jueves, 03 May 2012, 09:24

Re: Controlador De Teclado En Gambas 2  (Solucionado)
-----------------------------------
Hola. Gracias  Shell y jguardon por la pronta respuesta. 

Debería haberme decidido antes a escribir.

Despuesde probar vuestras sugerencias he podido comprobar que el problema esta en el componente gb.gui,ya que al cambiarla por gb.qt todas las pruebas que realice anteriormente han funcionado correctamente.

Por tanto, colocar un solucionado en la cabecera

Estoy usando las dos veriones, Gambas 2.19 y Gambas 3.1.1 ya que siguiendo algunos ejemplos en Gambas 3 dan error.
Como podeis intuir soy novato en cuanto a programación.
Gracias de nuevo


