Detectar flecha arriba, flecha abajo en un button

Post Reply
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Detectar flecha arriba, flecha abajo en un button

Post by fleal »

Hola gente,
¿Como detecto cuando el usuario ha oprimido las teclas de flecha arriba ó flecha abajo en un botón?

Gracias
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Re: Detectar flecha arriba, flecha abajo en un button

Post by wmormar »

fleal wrote:Hola gente,
¿Como detecto cuando el usuario ha oprimido las teclas de flecha arriba ó flecha abajo en un botón?

Gracias
oBtn:bKeyDown := {|nKey| pulsa(nKey)}

function pulsa(nkey)
? nKey
return .t.

Es al vuelo, espero te ayude
William, Morales
Saludos

méxico.sureste
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Post by fleal »

Ya había probado a usar oBtn:bKeyDown y oBtn:bKeyChar. Las teclas no son detectadas.
Probe a usar oBtn:bLostFocus := {|nKey| msginfo(nKey)} pero regresa nil en flecha arriba, flecha abajo.

¿Alguna idea mas?

Gracias
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Post by wmormar »

fleal wrote:Ya había probado a usar oBtn:bKeyDown y oBtn:bKeyChar. Las teclas no son detectadas.
Probe a usar oBtn:bLostFocus := {|nKey| msginfo(nKey)} pero regresa nil en flecha arriba, flecha abajo.

¿Alguna idea mas?

Gracias
oBtn:bChange := {|| pulsa() }

FUNCTION pulsa()
IF GetKeyState(VK_UP)
? "Flecha arriba"
ELSEIF GetKeyState(VK_DOWN)
? "Flecha abajo"
ENDIF
RETURN .t.
William, Morales
Saludos

méxico.sureste
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

Post by fleal »

William,
Lo resolví usando el VALID del botón,

REDEFINE BUTTON aBtns[1] ID 501 OF oFld:aDialogs[1] ; // Siguiente
VALID GetKeyState( VK_UP ) OR ;
GetKeyState( VK_RETURN ) ;
ACTION ( Siguiente( aGets, aCampos ) )

Sucede que al llegar al botón de Siguiente y oprimir flecha abajo el focus se pasa el primer get del dialogo. Pero no puedes regresar con flecha arriba para que el focus se ponga en el botón nuevamente. Asi que al llegar al botón de Siguiente, la única opción que estoy dejando es Flecha arriba y Enter.
Si es flecha arriba pues el focus se pone en el último get del dialogo antes de entrar al botón.
Si es Enter se activará la función Siguiente( )

Gracias
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Post by wmormar »

fleal wrote:William,
Lo resolví usando el VALID del botón,

REDEFINE BUTTON aBtns[1] ID 501 OF oFld:aDialogs[1] ; // Siguiente
VALID GetKeyState( VK_UP ) OR ;
GetKeyState( VK_RETURN ) ;
ACTION ( Siguiente( aGets, aCampos ) )

Sucede que al llegar al botón de Siguiente y oprimir flecha abajo el focus se pasa el primer get del dialogo. Pero no puedes regresar con flecha arriba para que el focus se ponga en el botón nuevamente. Asi que al llegar al botón de Siguiente, la única opción que estoy dejando es Flecha arriba y Enter.
Si es flecha arriba pues el focus se pone en el último get del dialogo antes de entrar al botón.
Si es Enter se activará la función Siguiente( )

Gracias
Excelente amigo.

Saludos
William, Morales
Saludos

méxico.sureste
Post Reply