Alguém tem um exemplo de Harbour modo texto com mouse?

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

Moderador: Moderadores

Avatar do usuário
codestudent
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 10 Jun 2014 14:24
Localização: São Paulo - SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por codestudent »

Olá, pessoal!

Tenho aqui um sistema feito em "clipper tradicional" (sem mouse) que estou adaptando para o harbour no modo texto, mesmo. Uso menus, tbrowses, gets e alerts. Como posso adaptá-lo para usar o mouse? Alguém tem algum exemplo de como fazer isso?

Se alguém puder postar um exemplo assim no fórum ficaria muito grato!
Harbour 3.0 + DBF/NTX + gtwvt
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por JoséQuintas »

Na parte normal do Harbour basta isto:

Código: Selecionar todos

   SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE ) // + HB_INKEY_GTEVENT )
No tbrowse e rotinas próprias, vai ter que tratar os eventos de mouse no retorno de Inkey()

Explicação: isso faz o mouse "funcionar".
As rotinas do Harbour como PROMPT, GET, já tem tratamento de mouse.
Nas suas rotinas, após pegar o Inkey(), é testar se a tecla é do mouse - veja em inkey.ch, são códigos acima de 1000
Vai usar também o valor de MRow(), MCol() que são as posições do clique do mouse, e verificar que texto tem nessas posições.

Procure criar uma rotina pra fazer essa checagem de posição, que depois vai ser só usar a rotina em tudo.
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

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por JoséQuintas »

Dependendo do estilo dos seus fontes e forma de uso, pode ser que facilite usar os botões da gtwvg, já que basta adicionar o resultado do clique, como um keyboard.
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/
Maurício Elias
Usuário Nível 3
Usuário Nível 3
Mensagens: 304
Registrado em: 12 Mai 2005 08:48

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por Maurício Elias »

Olá, bom dia.
Qual a vantagem de usar a gtwvg ? É uma lib gráfica ? A aplicação continua texto ?
Obrigado.
Abraços.
_______
Maurício
Avatar do usuário
codestudent
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 10 Jun 2014 14:24
Localização: São Paulo - SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por codestudent »

Não entendi, José Quintas. Você disse:
Na parte normal do Harbour basta isto:

Expandir visualizacaoVer codigo
1 SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE ) // + HB_INKEY_GTEVENT )
2
Mas eu tenho de colocar isso como? Devo fazer referência a

Código: Selecionar todos

#include "inkey.ch"
no ínicio do meu código?
Harbour 3.0 + DBF/NTX + gtwvt
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por JoséQuintas »

Exato. basta uma vez no programa principal.
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
codestudent
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 10 Jun 2014 14:24
Localização: São Paulo - SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por codestudent »

Seguindo as dicas de todos vocês amigos aqui do fórum, consegui colocar o mouse em modo texto funcionando junto com os menus, os tbrowses, os alerts e os gets de meu programa. E estou QUASE feliz com isso! Digo quase porque, nos menus (quando tento chamar os submenus) e nos alertas (que criei, usando uma função baseada em menus), tenho de clicar duas vezes para o evento do mouse funcionar.

Sei que nada neste mundo é perfeito mas, quando eu passar o sistema para os usuários eles vão encher meu saco porque terão de clicar duas vezes...

Os fontes estão no arquivo compactado anexo, junto com um executável já compilado e os arquivos de compilação. Alguém pode dar uma olhada e me dizer se tem como corrigir isso?
Anexos
FontesComMouse.zip
(499.5 KiB) Baixado 735 vezes
Harbour 3.0 + DBF/NTX + gtwvt
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por JoséQuintas »

Fiz um teste aqui adicionando a função que uso.
Testei usando harbour 3.2 + gtwvg (apenas porque a uso e pra ver se ficaria igual)

Alteração nos fontes:
#include "jpa.ch", criar variável usada em MENU TO, e não entendi mas precisei criar GetList := {} no cardapio, pra evitar erro de variável não existe GetList.

Arquivos a mais:
jpa.ch
ze_prompt.prg

No Harbour 3.2, default mingw, é só definir path=c:\harbour\bin
E pra compilar hbmk2 escolar10.hbp
O EXE está menor que o anterior, mas porque é gerado compactado.
era 1.084.928, e agora ficou com 610.304

Para o Harbour 3.2, o escolar10.hbp ficou assim:

Código: Selecionar todos

escolar10.prg
criabase.prg
cardapio.prg
alunos.prg
relalufic.prg
funcoes.prg
ze_prompt.prg
-oescolar10

xhb.hbc
gtwvg.hbc

-compr
-strip
Anexos
escolar10.zip
(604.77 KiB) Baixado 653 vezes
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
codestudent
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 10 Jun 2014 14:24
Localização: São Paulo - SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por codestudent »

Valeu mesmo, José Quintas!

Você adicionou o arquivo de cabeçalho "jpa.ch" e o arquivo "ze_prompt.prg", deu uma ajeitada no meu código (declarando algumas variáveis que eu não havia declarado...) e ficou uma beleza o resultado final! Agora os usuários clicarão apenas uma vez e o menu vai responder imediatamente!

Agora, se alguém do fórum quiser, pode aproveitar nosso código!
Harbour 3.0 + DBF/NTX + gtwvt
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por rubens »

Caro José...

O que eu preciso a mais no código abaixo para compilar para o sistema ficar em tecla cheia...

Código: Selecionar todos

************************************
#include "SET.CH"
#include "CLUBE.CH"
#include "DIRECTRY.CH"
#include "INKEY.CH"  
#include "hbgtinfo.ch"

#DEFINE CRLF CHR(13)+CHR(10)

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WIN_DEFAULT

FUNCTION MAIN( cINSTAL )

HB_GtInfo( HB_GTI_FONTNAME, "Lucida Console" )  // fonte
hb_gtInfo( HB_GTI_FONTWIDTH, 10 )
hb_gtInfo( HB_GTI_FONTSIZE , 20 )
hb_gtInfo( HB_GTI_FONTQUALITY , .T. )
HB_GtInfo( HB_GTI_WINTITLE, "DATASAC" ) // titulo da tela
HB_GtInfo( HB_GTI_MAXIMIZED, .F. )
HB_GtInfo( HB_GTI_ISFULLSCREEN, .T. )
hb_gtInfo( HB_GTI_ALTENTER, .T. )
HB_GtInfo( HB_GTI_ISFULLSCREEN, .T. )
O Título muda mas não aceita pressionar alt+enter para ir para tela cheia.. tô compilando do hmg3.0.35 porque o meu harbour tá baleado aqui nesta máquina e não posso formatar agora..
Descompactei o projeto e compilei pela HMG3.0.35 e compilou normal... já executa em tela cheia, funciona o mouse.
Mas o meu sistema não funciona... tá faltando alguma instrução aí?

Retirei os comandos hb_gtinfo do escolar10.prg

Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por JoséQuintas »

Agora que vi esta pergunta.

Lembro de ter visto postagens sobre isso no harbour-users, e talvez tenham modificado.

Já na GTWVG não existe tela cheia. Mas dá pra abrir no tamanho máximo, e também dá pra salvar como o usuário deixou, pra quando rodar o programa novamente ele ficar igual antes.

Sinceramente....
Acho que não tem vantagem abrir em console em tela cheia.
O motivo é simples: pra funcionar em tela cheia no console, somente se for tamanho padrão, e isso limita suas telas a 24x80, 28x80 e 33x80
E usar outros tamanhos de tela ajudam em muita coisa, por exemplo 33 x 132.
Dá pra organizar melhor as informações na tela.
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/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por microvolution »

OPA...
também concordava que não dava pra trabalhar em tela cheia... pois consegui migrar em jan/2015.
Agora que estamos no final de 2015, acho que consegui uma alternativa que tanto dá pra usar a tela maximizada (janela) quanto totalmente preenchida (tela cheia).
Pra maximizar (janela) faço o seguinte:

Código: Selecionar todos

wvt_Maximize()
Para o máximo da tela (tipo o MS-DOS, só que gráfico), faço o seguinte:

Código: Selecionar todos

HB_GtInfo( HB_GTI_ALTENTER, .t. )
Para os dois códigos acima funcionarem, precisam de 3 argumentos. Um dentro do arquivo e outros na compilação:

Código: Selecionar todos

#include "hbgtinfo.ch'
Na compilação, incluir 2 LIBs:

Código: Selecionar todos

GTWVG.HBC
GTWVW.HBC
Inclusive fiz uma função em que o usuário ao logar pela primeira vez no sistema, é apresentada uma opção em que ele escolhe, tipo:
TELA MAXIMIZADA SIM/NÃO?
ALT-ENTER SIM/NÃO?
TELA NORMAL (RESTAURADA) SIM/NÃO?
FECHAR ATRAVÉS DO X DA JANELA SIM/NÃO?

Dentre outras ações, mas, isso não é o principal deste tópico que já está fugindo do assunto "Alguém tem um exemplo de Harbour modo texto com mouse?"

Então, voltando ao tema central deste tópico, o prezado professor JQuintas tem nos ajudado e muito, inclusive pesquisando nos grupos oficials do Viktor, além de - se não me engano, ser o mantenedor do http://www.harbourdoc.com.br, que cheguei a pensar que era do Viktor.

Ele já postou exemplos, magníficos, mas, incluindo o AllInOn e o Escola10, mas, infelizmente não consegui compreender como funciona o MRow() e MCol().
Alguém aqui (não esquecendo dele também) sabe uma coisa funcional para capturar o click do mouse nos menus e sub-menus em modo console usando a GTWVG?
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por Jairo Maia »

Olá Microvolution,

Não sei se a idéia é saber em qual botão criado com WVG foi clicado. Se for, esse exemplo não é a melhor opção. Mas para capturar a posição do mouse e a posição dos cliques, veja esse exemplo:

Código: Selecionar todos

/*
  Compilar usando: Hbmk2 exemplo.prg -lxhb
*/
Function Main()

 Local cAlgo := Space( 30 )
 Public nTask, nIdle

 Clear Screen

 nTask := HB_BackGroundAdd( {|| CaptaMouse() } )
 nIdle := HB_IdleAdd( {|| HB_BackGroundRun( nTask ) } )

 Inkey(0)

 HB_BackGroundDel( nTask )  // coloque antes de sair do sistema
 HB_IdleDel( nIdle )
 
 Clear Screen

Return Nil

FuncTion CaptaMouse()

  @ 2,2 say "Linha do Mouse...: " + Hb_NToS( MRow() )
  @ 4,2 say "Coluna do Mouse..: " + Hb_NToS( MCol() )
  
  If MLeftDown()
   @ 7,2 say "Botao ESQUERDO pressionado na Linha " + Hb_NToS( MRow() ) + ", coluna " + Hb_NToS( MCol() )
  ElseIf MRightDown()
   @ 7,2 say "Botao DIREITO pressionado na Linha  " + Hb_NToS( MRow() ) + ", coluna " + Hb_NToS( MCol() )
  EndIf
  
Return Nil
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por JoséQuintas »

Se o menu é estilo console, mesmo em GTWVG, o jeito é tradicional:

Usando Inkey() , pode-se detectar o click do mouse.
Usando MRow() e MCol() se verificam linha e coluna do mouse.
Fora isso, é ter a posição da área clicada, e comparar com MRow(), MCol()

Exemplo:

Código: Selecionar todos

@ 1, 0 SAY "TESTE PARA CLICK"
DO WHILE nKey != K_ESC
   nKey := Inkey(0)
   IF nKey == K_LBUTTONDOWN
     IF MRow() == 1 .AND. MCOL() >= 9 .AND> MCOL() <= 15
        @ 15, 0 SAY "Foi cliclado
    ENDIF
   ENDIF
ENDDO
O texto "TESTE PARA CLICK" ocupa a linha 1, da coluna 0 até a coluna 15
Então, ao ser clicado o mouse, é testar se o click foi nessa região, linha 1, e colunas entre 0 e 15.

Lógico... se for fazer isso pra cada posição é muito fonte.
Melhor criar rotinas pra isso, por exemplo, um array contendo as coordenadas.

Código: Selecionar todos

oPosicoes := { ;
                  { 1, 0, 15, "A" } } // linha, coluna inicial, coluna final, keyboard pra simular
Depois na hora de analisar, comparar com os valores do array

Código: Selecionar todos

IF nKey == K_LBUTTONDOWN
   FOR nCont = 1 TO Len( oPosicoes )
      IF MRow() == oPosicoes[ nCont, 1 ] .AND. MCol() >= oPosicoes[ nCont, 2 ] .AND. MCOL() <= oPosicoes[ nCont, 3 ]
         KEYBOARD oPosicoes[ nCont, 4 ]
      ENDIF
   NEXT
ENDIF
É só um exemplo, fazendo isso na rotina que monta o visual do menu, a própria rotina pode montar o array de coordenadas.
Uso isso no menu que postei, inclusive ele vai passando as coordenadas de um submenu para o outro, que é justamente o que faz funcionar o click em qualquer lugar do menu.
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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Alguém tem um exemplo de Harbour modo texto com mouse?

Mensagem por cjp »

Meus amigos,

Só agora estou incluindo mouse em meus sistemas. Já havia tentado no passado, mas abandonei porque tive alguns problemas.

Mas agora estou precisando. Achei esta solução muito simples e prática.

Por enquanto (ainda terei que testar melhor), tenho apenas um problema: como abandonar um get com um mouse? Ou, em outros termos: como simular o pressionamento da tecla ESC com o mouse?

Explico a necessidade: preciso acessar o meu sistema pelo TeamViewer, a partir do meu celular. Só que no TV não tem as setas e o Enter. Então, eu preciso que o funcionamento se dê todo com o mouse.

Alguém poderia me ajudar?
Inacio de Carvalho Neto
Responder