Capturar tecla ESC y RETURN en TTreeview
Capturar tecla ESC y RETURN en TTreeview
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 ?
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
Joaquín Martínez
Re: Capturar tecla ESC y RETURN en TTreeview
Horacio,
¿Pero como capturo return y Esc?
¿Pero como capturo return y Esc?
Un Saludo,
Joaquín Martínez
Joaquín Martínez
- carlos vargas
- Posts: 1723
- Joined: Tue Oct 11, 2005 5:01 pm
- Location: Nicaragua
Re: Capturar tecla ESC y RETURN en TTreeview
Code: Select all | Expand
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)
Carlos Vargas
Desde Managua, Nicaragua (CA)
Re: Capturar tecla ESC y RETURN en TTreeview
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.
¿ 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
Joaquín Martínez
- karinha
- Posts: 7963
- Joined: Tue Dec 20, 2005 7:36 pm
- Location: São Paulo - Brasil
- Been thanked: 5 times
- Contact:
Re: Capturar tecla ESC y RETURN en TTreeview
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- Antonio Linares
- Site Admin
- Posts: 42660
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: Capturar tecla ESC y RETURN en TTreeview
Joaquin,
Prueba a implementar el método KeyDown() en la clase TTreeView
Prueba a implementar el método KeyDown() en la clase TTreeView
Re: Capturar tecla ESC y RETURN en TTreeview
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:
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
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
Joaquín Martínez
- Antonio Linares
- Site Admin
- Posts: 42660
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: Capturar tecla ESC y RETURN en TTreeview
Joaquín,
Para mantener la lógica de FiveWin, lo has intentado asi ?
case nMsg == WM_KEYDOWN
...
ó
case nMsg == WM_CHAR
Para mantener la lógica de FiveWin, lo has intentado asi ?
case nMsg == WM_KEYDOWN
...
ó
case nMsg == WM_CHAR
Re: Capturar tecla ESC y RETURN en TTreeview
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.
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
Joaquín Martínez
Re: Capturar tecla ESC y RETURN en TTreeview
Antonio,
Dime si así sería correcto:
En la definición de los métodos de la clase:
Y así el HandleEvent, y ya captura:
¿Me puedes explicar que hace el método GetDlgCode( nLastKey ) ?
Dime si así sería correcto:
En la definición de los métodos de la clase:
Code: Select all | Expand
METHOD GetDlgCode( nLastKey ) INLINE DLGC_WANTALLKEYS
Y así el HandleEvent, y ya captura:
Code: Select all | Expand
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
Joaquín Martínez
- Antonio Linares
- Site Admin
- Posts: 42660
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact:
Re: Capturar tecla ESC y RETURN en TTreeview
Joaquín,
Todo ok, lo único que cambiaria es esto:
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.
Todo ok, lo único que cambiaria es esto:
Code: Select all | Expand
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.
Re: Capturar tecla ESC y RETURN en TTreeview
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:
Y se redefine el método Keydown como sigue:
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.
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
METHOD GetDlgCode( nLastKey ) INLINE DLGC_WANTALLKEYS
METHOD KeyDown( nKey, nFlags )
Y se redefine el método Keydown como sigue:
Code: Select all | Expand
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
Joaquín Martínez
- Antonio Linares
- Site Admin
- Posts: 42660
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Has thanked: 69 times
- Been thanked: 96 times
- Contact: