Página 1 de 3
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 22 Jun 2014 17:35
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!
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 22 Jun 2014 21:02
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.
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 22 Jun 2014 21:11
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.
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 23 Jun 2014 08:46
por Maurício Elias
Olá, bom dia.
Qual a vantagem de usar a gtwvg ? É uma lib gráfica ? A aplicação continua texto ?
Obrigado.
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 23 Jun 2014 21:00
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
no ínicio do meu código?
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 23 Jun 2014 22:41
por JoséQuintas
Exato. basta uma vez no programa principal.
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 23 Jun 2014 23:13
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?
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 24 Jun 2014 05:50
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
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 24 Jun 2014 09:53
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!
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 07 Nov 2014 18:15
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
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 11 Nov 2014 23:01
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.
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 23 Dez 2015 20:27
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:
Para o máximo da tela (tipo o MS-DOS, só que gráfico), faço o seguinte:
Para os dois códigos acima funcionarem, precisam de 3 argumentos. Um dentro do arquivo e outros na compilação:
Na compilação, incluir 2 LIBs:
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?
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 24 Dez 2015 13:47
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
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 24 Dez 2015 19:30
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.
Alguém tem um exemplo de Harbour modo texto com mouse?
Enviado: 09 Jun 2016 23:57
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?