Página 1 de 2
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 04 Abr 2017 10:21
por asimoes
Pessoal,
Tem como usar o wheel do mouse (rodinha) para rolar no prompt de menu, como defino o _SET_EVENTMASK ?
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 04 Abr 2017 10:35
por Kapiaba
Algo assim?
Código: Selecionar todos
PROCEDURE TEST7( cSkip )
LOCAL nKey, nMask, cText
CLS
? "For the last test, a loop is started and all keyboard and mouse"
? "events are allowed. Each event will be displayed. Press the TAB"
? "key to exit. Try moving the mouse, holding and releasing the mouse"
? "buttons as well as double-clicking the mouse buttons."
?
? "Press any key."
nMask := INKEY_ALL
SET(_SET_EVENTMASK, nMask)
IF ! EMPTY( cSkip )
IF UPPER( cSkip ) == "BREAK"
SETCANCEL(.T.)
ALTD(1)
tone( 440, 6 )
ELSE
SETCANCEL(.F.)
ALTD(0)
tone( 660, 6 )
END IF
END IF
WHILE (nKey := INKEY( 0, nMask )) != K_TAB
DO CASE
CASE nKey == K_MOUSEMOVE
? "The mouse moved."
CASE nKey == K_LBUTTONDOWN
? "The left mouse button was pushed."
CASE nKey == K_LBUTTONUP
? "The left mouse button was released."
CASE nKey == K_RBUTTONDOWN
? "The right mouse button was pushed."
CASE nKey == K_RBUTTONUP
? "The right mouse button was released."
CASE nKey == K_LDBLCLK
? "The left mouse button was double-clicked."
CASE nKey == K_RDBLCLK
? "The right mouse button was double-clicked."
OTHERWISE
? "A keyboard key was pressed: ", nKey,;
IF( nKey >= 32 .AND. nKey <= 255, CHR( nKey ), "" )
END CASE
END WHILE
? "The TAB key ("+LTRIM(STR(nKey))+") was pressed. Exiting..."
RETURN
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 04 Abr 2017 12:05
por asimoes
Obrigado Kapiaba,
Consegui, adaptei um exemplo que o Abel postou em 2012 agora usando wheel (rodinha), e destaque usando a seta do mouse.
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 04 Abr 2017 22:48
por JoséQuintas
Nunca testei, mas o Harbour tem isso embutido.
Lembro que chegou a usar o menu do AllInOne.
Lá tem isso pronto, não apenas para o menu, mas para o aplicativo inteiro.
Basta usar o HB_GTI_INKEYFILTER
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 09:12
por asimoes
Quintas,
Eu uso o seu modelo de menu nas minhas aplicações particulares, mas aqui na prefeitura, o povo usa o tradicional MENU TO..., quanto a HB_GTI_INKEYFILTER como é que funciona isso ?
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 09:15
por JoséQuintas
Você consegue modificar todo comportamento de Inkey() de uma vez, sem precisar ficar alterando todo aplicativo e todas as rotinas.
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 09:36
por asimoes
Quintas,
O HB_GTI_INKEYFILTER só funciona com HB_GT_WVG, tentei com HB_GT_WVT não rolou.
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 09:54
por JoséQuintas
Testei aqui, e realmente é isso.
Vai entender.....
Não funciona com console, nem com GTWVT.
Funciona com GTWVG e GTWVW.
Não sei se seria o caso de informar aos developers.
Nos tempos do Clipper eu tinha MyInkey() no lugar de Inkey(), e fazia modificações nela.
Não sei se o SET KEY poderia resolver.
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 10:04
por JoséQuintas
Plano B, com SET KEY:
Código: Selecionar todos
#include "hbgtinfo.ch"
#include "inkey.ch"
PROCEDURE Main
LOCAL nOpc := 1
SET EVENTMASK TO INKEY_ALL - INKEY_MOVE // + HB_INKEY_GTEVENT ) // está atrapalhando aceitar eventos de GT
SetMode( 25, 80 )
SET KEY K_MWBACKWARD TO MouseWheelDown()
SET KEY K_MWFORWARD TO MouseWheelUp()
CLS
@ 1, 0 PROMPT "primeira"
@ 2, 0 PROMPT "Segunda"
@ 3, 0 PROMPT "Terceira"
@ 4, 0 PROMPT "Quarta"
MENU TO nOpc
RETURN
FUNCTION MouseWheelDown()
KEYBOARD Chr( K_DOWN )
RETURN NIL
FUNCTION MouseWheelUp()
KEYBOARD Chr( K_UP )
RETURN NIL
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVT_DEFAULT
RETURN NIL
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 10:15
por JoséQuintas
Aproveitando, já comentei isto antes:
Usando Edge/Windows 10, meus posts de fontes ficam com espacejamento duplo, pulando uma linha a cada linha de fonte.
Minha dúvida é se isso acontece só na minha máquina, quando visualizo meus posts, ou se a visualização fica alterada pra todos.
Aliás... no W10 isso ficou ruim.
Banco Itaú só funciona no explorer.
Certas coisas do google não funcionam nem no Edge, nem no Explorer.
Acabou que tenho Edge, Explorer e Firefox instalados.
Um não substitui o outro.
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 12:35
por asimoes
Quintas,
O teu exemplo funcionou com GTWVT.
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 19:29
por asimoes
Desafio para entender como funciona.
Com GTWVT não funciona HB_gtInfo( HB_GTI_INKEYFILTER, { | nKey | MyInkeyFilter( nKey ) } ), descobri que fazendo um
SET KEY SET KEY K_MOUSEMOVE TO MouseMove(), consegui farzer "funcionar" só que com o movimento do mouse, ainda não entendi.
Código: Selecionar todos
SET KEY K_MOUSEMOVE TO MouseMove()
FUNCTION MouseMove()
LOCAL nKey := 0
DO WHILE nKey == 0
nKey := Inkey( .1 )
ENDDO
RETURN Nil
FUNCTION MyInkeyFilter( nKey )
LOCAL nBits, lIsKeyCtrl
nBits := hb_GtInfo( HB_GTI_KBDSHIFTS )
lIsKeyCtrl := ( nBits == hb_BitOr( nBits, HB_GTI_KBD_CTRL ) )
SWITCH nKey
CASE K_ENTER
CASE K_ESC
hwg_MsgInfo("ESC TESTE")
EXIT
CASE K_CTRL_V
IF lIsKeyCtrl
hb_GtInfo( HB_GTI_CLIPBOARDPASTE )
RETURN 0
ENDIF
ENDSWITCH
RETURN nKey
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 19:45
por asimoes
Evoluiu para isso:
COM GTWVT a função MyInkeyFilter(), ainda não entendi.
Código: Selecionar todos
nIdle := hb_IdleAdd( {|| KeyIntercept() } )
FUNCTION KeyIntercept()
LOCAL nKey := 0
nKey := Inkey()
hb_IdleSleep(.1)
RETURN Nil
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 20:01
por JoséQuintas
O problema está no MENU TO.
Assim como no Clipper, há certas teclas desprezadas por ele.
Deste jeito INKEYFILTER funcionou na GTWVT.
Código: Selecionar todos
#include "hbgtinfo.ch"
#include "inkey.ch"
PROCEDURE Main
LOCAL nOpc := 1, acOptions := { "primeira", "segunda", "terceira", "quarta" }, oElement, nKey
hb_gtInfo( HB_GTI_INKEYFILTER, { | nKey | MyInkeyFilter( nKey ) } )
SET EVENTMASK TO INKEY_ALL - INKEY_MOVE
SetMode( 25, 80 )
CLS
DO WHILE .T.
FOR EACH oElement IN acOptions
@ oElement:__EnumIndex, 5 SAY oElement COLOR iif( nOpc == oElement:__EnumIndex, "N/W", "W/N" )
NEXT
nKey := Inkey(0)
DO CASE
CASE nKey == K_ESC ; EXIT
CASE nKey == K_ENTER ; EXIT
CASE nKey == K_UP ; nOpc := iif( nOpc == 1, Len( acOptions ), nOpc - 1 )
CASE nKey == K_DOWN ; nOpc := iif( nOpc == Len( acOptions ), 1, nOpc + 1 )
ENDCASE
ENDDO
RETURN
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVT_DEFAULT
RETURN NIL
FUNCTION MyInkeyFilter( nKey )
SWITCH nKey
CASE HB_K_CLOSE ; RETURN K_ESC
CASE K_MWBACKWARD ; RETURN K_DOWN
CASE K_MWFORWARD ; RETURN K_UP
END SWITCH
RETURN nKey
Usar wheel (rodinha) do mouse no Menu Prompt
Enviado: 05 Abr 2017 20:15
por JoséQuintas
Agora pode usar rodinha, ou apenas mexer no mouse.... rs
Código: Selecionar todos
#include "hbgtinfo.ch"
#include "inkey.ch"
PROCEDURE Main
LOCAL nOpc := 1, acOptions := { "primeira", "segunda", "terceira", "quarta" }, oElement, nKey
hb_gtInfo( HB_GTI_INKEYFILTER, { | nKey | MyInkeyFilter( nKey ) } )
SET EVENTMASK TO INKEY_ALL
SetMode( 25, 80 )
CLS
DO WHILE .T.
FOR EACH oElement IN acOptions
@ oElement:__EnumIndex, 5 SAY oElement COLOR iif( nOpc == oElement:__EnumIndex, "N/W", "W/N" )
NEXT
nKey := Inkey(0)
DO CASE
CASE nKey == K_ESC ; EXIT
CASE nKey == K_ENTER ; EXIT
CASE nKey == K_UP ; nOpc := iif( nOpc == 1, Len( acOptions ), nOpc - 1 )
CASE nKey == K_DOWN ; nOpc := iif( nOpc == Len( acOptions ), 1, nOpc + 1 )
ENDCASE
ENDDO
RETURN
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVT_DEFAULT
RETURN NIL
FUNCTION MyInkeyFilter( nKey )
STATIC nMouseRow
IF nMouseRow == NIL
nMouseRow := MRow()
ENDIF
SWITCH nKey
CASE HB_K_CLOSE ; RETURN K_ESC
CASE K_MWBACKWARD ; RETURN K_DOWN
CASE K_MWFORWARD ; RETURN K_UP
CASE K_MOUSEMOVE
IF MRow() < nMouseRow
nMouseRow := MRow()
RETURN K_UP
ENDIF
IF MRow() > nMouseRow
nMouseRow := MRow()
RETURN K_DOWN
ENDIF
END SWITCH
RETURN nKey