Usar wheel (rodinha) do mouse no Menu Prompt

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem por asimoes »

Pessoal,

Tem como usar o wheel do mouse (rodinha) para rolar no prompt de menu, como defino o _SET_EVENTMASK ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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.
Anexos
MENUTO.PRG
Exemplo usando wheel
(7.68 KiB) Baixado 126 vezes
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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 ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem por JoséQuintas »

Você consegue modificar todo comportamento de Inkey() de uma vez, sem precisar ficar alterando todo aplicativo e todas as rotinas.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem por asimoes »

Quintas,

O HB_GTI_INKEYFILTER só funciona com HB_GT_WVG, tentei com HB_GT_WVT não rolou.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem por asimoes »

Quintas,

O teu exemplo funcionou com GTWVT.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Usar wheel (rodinha) do mouse no Menu Prompt

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder