Page 1 of 1

Teclas aceleradoras en Dialogo

PostPosted: Wed May 13, 2009 11:08 pm
by RodMG
Hola,

¿Existe alguna manera de asignar una tecla aceleradora a los controles GET y COMBOBOX? Por ahora, sólo me funciona con los CHECKBOX.


Saludos,


Rodolfo

Re: Teclas aceleradoras en Dialogo

PostPosted: Thu May 14, 2009 7:20 am
by softruz
Has probado utilizar Por ejemplo:

SetKey(VK_F2,{|| funcion()})

Un Saludo.

Re: Teclas aceleradoras en Dialogo

PostPosted: Thu May 14, 2009 7:30 pm
by RodMG
Hola, softruz.

Gracias por responder.

El asunto del SetKey lo tengo claro y funcionando muy bien. Lo que busco es, más bien, poder asignarle una leyenda a un control GET o COMBOBOX, la leyenda contendrá obviamente el "&" para indicar la tecla que será utilizada en conjunto con la tecla ALT para pasar el foco a ese control. Busco algo como lo que sucede hoy con los botones que, uan vez que le indicas cual va a ser la tecla aceleradora, pueder utilizar la tecla ALT + la letra aceleradora asignada y el foco pasa al botón (En el caso del botón además despara la acción, en el caso de los controles basta con pasar el foco al control indicado).

Saludos,


Rod.

Re: Teclas aceleradoras en Dialogo

PostPosted: Fri May 15, 2009 11:30 pm
by cmsoft
Hola Rodolfo:
No se si es tarde aun pero podrias probar con esto
Code: Select all  Expand view

oDlg:bKeyDown = { | nKey, nFlags | TeclaFunc(nKey,oGet) }

*******************************************************************************
** Acelerador de Teclas
STATIC FUNCTION TeclaFunc(nKey, oGet)
IF nkey = 120 && F9
   oGet[01]:SetFocus()
ENDIF
IF nKey = 114 && F3
   oGet[02]:SetFocus()
ENDIF
IF nKey = 119 && F8
   oGet[03]:SetFocus()
ENDIF
RETURN NIL
 

En este caso es con las teclas de funcion, pero podria ser con cualquier convinacion de teclas que te tire en nKey
Espero te sirva

Re: Teclas aceleradoras en Dialogo

PostPosted: Sat May 16, 2009 2:07 pm
by RodMG
Hoa, cmsoft.


Gracias por responder. Sin embargo busco la forma más estandar (Como en los diálogos de opciones de Word o Excel), es decir utilizando la tecla ALT en combinación con la tecla aceleradora asignada a cada control. He intentado con oDlg:KeyDown y resulta que puedo detectar las teclas CONTROL y SHIFT utilizando GetKeyState( VK_CONTROL ) o GetKeyState( VK_SHITF ), pero no he podido detectar cuando se utiliza la tecla ALT.

Necesito poder llegar a cualquier control de un diálogo utilizando una combinación de teclas (ALT + Tecla-aceleradora), pero hasta ahora no he encontrado la forma.

Antonio, ¿Habrá alguna manera de lograr esto?


Saludos,


Rodolfo

Re: Teclas aceleradoras en Dialogo

PostPosted: Sat May 16, 2009 3:01 pm
by Alfredo Arteaga
Checa esto:

Code: Select all  Expand view

#include "FiveWin.ch"

function Main()

   LOCAL oDlg, lExit := .f., oBtn
   LOCAL cName:=Space(25), cFirst:=Space(25)

   DEFINE DIALOG oDlg FROM 5, 5 TO 15, 40 TITLE "A Dialog Box"

   @ 1, 2 SAY "&Name" OF oDlg
   @ 1, 4 GET cName OF oDlg
   @ 2, 2 SAY "&First" OF oDlg
   @ 2, 4 GET cFirst OF oDlg

   @ 3,  4 BUTTON "&Ok" OF oDlg SIZE 40, 12
   @ 3, 12 BUTTON oBtn PROMPT "&Cancel" OF oDlg SIZE 40, 12 ACTION ( lExit := .t., oDlg:End() )

   ACTIVATE DIALOG oDlg VALID lExit

return nil
 

Re: Teclas aceleradoras en Dialogo

PostPosted: Sat May 16, 2009 5:09 pm
by RodMG
Hola, Alfredo.

Muchas gracias por la ayuda, hasta ahora no había necesitado de esto. En mi caso utilizo recursos por lo que, basado en tu ejemplo, fue suficiente cambiar el orden de los controles de tal forma que la etiqueta correspondiente a cada control este inmediatamente antes del control.

Muchas gracias por la ayuda, espero que pronto podamos vernos, platicar y, ya instalados, hasta recetarnos un tequilita en algúna hora-del-amigo que hay por tus rumbos, jejeje.

Saludos,


Rodolfo

Re: Teclas aceleradoras en Dialogo

PostPosted: Sun May 17, 2009 2:12 am
by Alfredo Arteaga
Asi es señor, solo hay que ordenar los controles.

Y si se trata de tequila, cualquier compromiso se suspende de inmediato!

Saludos.