FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Capturar tecla ESC y RETURN en TTreeview
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Capturar tecla ESC y RETURN en TTreeview
Posted: Thu Oct 16, 2014 06: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
Posts: 1364
Joined: Wed Jun 21, 2006 12:39 AM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Thu Oct 16, 2014 10:01 PM

Fijate si te sirve

viewtopic.php?f=6t=29404

Saludos

&

Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Thu Oct 16, 2014 10:08 PM

Horacio,
¿Pero como capturo return y Esc?

Un Saludo,

Joaquín Martínez
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Thu Oct 16, 2014 11:25 PM
Code (fw): Select all Collapse
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)
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Fri Oct 17, 2014 04: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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Fri Oct 17, 2014 12:36 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: 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
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Sun Oct 19, 2014 08: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 (fw): Select all Collapse
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Mon Oct 20, 2014 02: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
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Mon Oct 20, 2014 02: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
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Mon Oct 20, 2014 03:07 PM
Antonio,

Dime si así sería correcto:

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

Code (fw): Select all Collapse
METHOD GetDlgCode( nLastKey ) INLINE DLGC_WANTALLKEYS


Y así el HandleEvent, y ya captura:

Code (fw): Select all Collapse
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Mon Oct 20, 2014 03:41 PM
Joaquín,

Todo ok, lo único que cambiaria es esto:

Code (fw): Select all Collapse
      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
Posts: 458
Joined: Tue Mar 14, 2006 07:26 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Mon Oct 20, 2014 05: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 (fw): Select all Collapse
   METHOD GetDlgCode( nLastKey ) INLINE DLGC_WANTALLKEYS
   METHOD KeyDown( nKey, nFlags )


Y se redefine el método Keydown como sigue:

Code (fw): Select all Collapse
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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Capturar tecla ESC y RETURN en TTreeview
Posted: Tue Oct 21, 2014 04:37 AM

Joaquin,

correcto, gracias :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion