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