Página 1 de 1

KeyDown y F10

Publicado: Vie Ago 04, 2023 5:53 pm
por carloskds
no he sido capaz de interceptar las pulsaciones de teclas F2...F12
he usado el evento OnKeyDown, OnKeyUp, OnChar, del form o del control browse, pero no me los detecta, si me detecta teclas alfanuméricas sin problemas...
gracias

Re: KeyDown y F10

Publicado: Dom Ago 06, 2023 7:07 pm
por ignacio
Hola,

Funcionado sin problemas en TForm:OnKeyDown

Saludos

Re: KeyDown y F10

Publicado: Lun Ago 07, 2023 10:03 pm
por carloskds
Ignacio, en este código me funciona del f4 a f9 bien, f10 no reacciona, F11 y 12 tambien funcionan bien.

Código: Seleccionar todo

METHOD FormKeyDown( oSender, nKey, nFlags ) CLASS TFormClientC
   DO CASE
   CASE nKey==VK_F4
      MsgInfo("Presiono F4")
   CASE nKey==VK_F5
      MsgInfo("Presiono F5")
   CASE nKey==VK_F6
      MsgInfo("Presiono F6")
   CASE nKey==VK_F7
      MsgInfo("Presiono F7")
   CASE nKey==VK_F8
      MsgInfo("Presiono F8")
   CASE nKey==VK_F9
      MsgInfo("Presiono F9")
   CASE nKey==VK_F10
      MsgInfo("Presiono F10")
   CASE nKey==VK_F11
      MsgInfo("Presiono F11")
   CASE nKey==VK_F12
      MsgInfo("Presiono F12")
   ENDCASE
RETURN Nil
he hecho un pequeño modulo en harbour puro, para descartar problemas del teclado, y ahi F10 me retorna -9, obiamente bajo consola, se que en windows tendria otro codigo...

Código: Seleccionar todo

   #include "Inkey.ch"

   PROCEDURE Main
      LOCAL nEvent
      CLS
      ? "Waiting for events (press ESC to quit)"
      SET EVENTMASK TO INKEY_ALL

      DO WHILE Lastkey() <> K_ESC
         nEvent := Inkey(0)
         @ 0, 0 CLEAR TO 1, MaxCol()

         @ 0,1 SAY "Key Code:"
         ?? nEvent
      ENDDO

   RETURN

Re: KeyDown y F10

Publicado: Lun Ago 07, 2023 10:15 pm
por carloskds
veo que en otras lib gui, tampoco me funciona el F10. asi que no es xailer. disculpa la molestia ignacio.
de momento no es importante.

Re: KeyDown y F10

Publicado: Mar Ago 08, 2023 11:38 am
por jfgimenez
Carlos,

la tecla F10 la tiene "reservada" windows para abrir el menú de la ventana, y por eso no se recibe por WM_KEYDOWN. Si necesitas capturar su pulsación tendrás que interceptar el mensaje WM_SYSCOMMAND. Algo así:

Código: Seleccionar todo

METHOD WMSysCommand( wParam, lParam ) CLASS TForm1
   IF wParam == SC_KEYMENU
      MsgInfo( "Se ha pulsado F10" )
      RETURN 0
   ENDIF
RETURN ::Super:WMSysCommand( wParam, lParam )

Re: KeyDown y F10

Publicado: Mié Ago 09, 2023 5:39 pm
por carloskds
Gracias José.
Muy claro. :-)