Capturar tecla ESC y RETURN en TTreeview

Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Thu Oct 16, 2014 6:33 pm

Hola,

Pues eso, que no sé como hacer que con intro en un ttreeview sea como aceptar o con ESC me pueda salir o ejecutar una acción.

No sé como capturar estas teclas en un tree. ¿ Se puede hacer ?
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby horacio » Thu Oct 16, 2014 10:01 pm

Fijate si te sirve

viewtopic.php?f=6&t=29404

Saludos
horacio
 
Posts: 1358
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Thu Oct 16, 2014 10:08 pm

Horacio,
¿Pero como capturo return y Esc?
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby carlos vargas » Thu Oct 16, 2014 11:25 pm

Code: Select all  Expand view

oTree:bKeyDown := {|n| ProcKeyTree(n) }
...
function Prockey(n)
 do case
  case n==VK_ESC
   ...
   return 1
  case n==VK_RETURN
    ...
    return 1
 enddo
return nil
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1688
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Fri Oct 17, 2014 4:13 am

Hola Carlos,

¿ Ese código lo has probado con un ttreeview ?

Porque yo pongo otree:bkeydown :={|nkey| msginfo(nkey) }
Y nunca muestra nada con Enter ni Esc.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby karinha » Fri Oct 17, 2014 12:36 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7316
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Capturar tecla ESC y RETURN en TTreeview

Postby Antonio Linares » Sat Oct 18, 2014 12:45 pm

Joaquin,

Prueba a implementar el método KeyDown() en la clase TTreeView
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Sun Oct 19, 2014 8:02 pm

Antonio,

Esta es la única forma en la que he conseguido ejecutar bKeydown. Pero no estoy muy seguro de que sea correcto.

He cambiado este método en la clase Ttreeview:

Code: Select all  Expand view
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TTreeView2

   local oItem
   
   do case
     
      case nMsg == WM_CHAR
           if nWParam == VK_RETURN
              return 1
           endif
     
      case nWParam == VK_RETURN .or. nWParam == VK_ESCAPE
           if ::bKeyDown != nil
              return Eval( ::bKeyDown, nWParam, 0, Self )
           endif

   endcase
   
return ::Super:HandleEvent( nMsg, nWParam, nLParam )
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby Antonio Linares » Mon Oct 20, 2014 2:00 pm

Joaquín,

Para mantener la lógica de FiveWin, lo has intentado asi ?

case nMsg == WM_KEYDOWN
...

ó

case nMsg == WM_CHAR
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Mon Oct 20, 2014 2:54 pm

Antonio,

Ese es el principal problema, al pulsar Intro, se recibe nMsg==135

Que según veo, corresponde al define WM_GETDLGCODE. No recibe ni Keydown ni Char.

No sé como habría que hacerlo correctamente para capturar Return y Esc.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Mon Oct 20, 2014 3:07 pm

Antonio,

Dime si así sería correcto:

En la definición de los métodos de la clase:

Code: Select all  Expand view

METHOD GetDlgCode( nLastKey ) INLINE DLGC_WANTALLKEYS
 


Y así el HandleEvent, y ya captura:

Code: Select all  Expand view


METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TTreeView

   local oItem
   
   do case
      case nMsg == WM_KEYDOWN
           if ::bKeyDown != nil
              return Eval( ::bKeyDown, nWParam, 0, Self )
           endif
           return 0
   endcase
   
return ::Super:HandleEvent( nMsg, nWParam, nLParam )
 


¿Me puedes explicar que hace el método GetDlgCode( nLastKey ) ?
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby Antonio Linares » Mon Oct 20, 2014 3:41 pm

Joaquín,

Todo ok, lo único que cambiaria es esto:

Code: Select all  Expand view
     case nMsg == WM_KEYDOWN
                       return ::KeyDown( nWParam, nLParam )
 


De esta forma el código queda más estructurado y además una clase que derivase de esta podría facilmente redefinir la funcionalidad del método KeyDown(). De dejar tu código ahi, obligarias a redefinir HandleEvent(). No es realmente necesario pero es la forma correcta de hacerlo :-)

El método GetDlgCode() es la respuesta a un mensaje que envía Windows para interrogar al control acerca de las teclas que quiere procesar. Al devorlver DLGC_WANTALLKEYS el control responde que las quiere todas.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Capturar tecla ESC y RETURN en TTreeview

Postby jmartial » Mon Oct 20, 2014 5:07 pm

Antonio,

Como me ha funcionado perfectamente y me captura tanto Return como ESCAPE, es con los siguientes pasos:

- Quitamos el método HandleEvent, parece ser que no sirve para nada, se usaría el del padre.

- Se redefinen los siguientes métodos en la definición de la clase:

Code: Select all  Expand view

   METHOD GetDlgCode( nLastKey ) INLINE DLGC_WANTALLKEYS
   METHOD KeyDown( nKey, nFlags )
 


Y se redefine el método Keydown como sigue:

Code: Select all  Expand view

METHOD KeyDown( nKey, nFlags ) CLASS TTreeView

   if ::bKeyDown != nil
      return Eval( ::bKeyDown, nKey, nFlags, Self )
   endif

return ::Super:KeyDown( nKey, nFlags )

 


Si ves algo más limpio o algo que no guarde la lógica de eventos de FW, me lo dices, pero así se puede definir bKeyDown para capturar
VK_RETURN y VK_ESCAPE, además de funcionar las teclas del TreeView.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Capturar tecla ESC y RETURN en TTreeview

Postby Antonio Linares » Tue Oct 21, 2014 4:37 am

Joaquin,

correcto, gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41366
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 56 guests