Página 1 de 1

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 22 Jul 2015 17:43
por rrb info
Em primeiro lugar gostaria de parabenizar pelo excelente serviço prestado à comunidade de programadores, e agradecer pois tudo que aprendi sobre migrar de CLIPPER para HARBOUR foi no forum do PC TOLEDO.
Venho do clipper 5.2 ( em uma maquina com WINDOWS 7 / 32 BITS ) e a muito tempo não programo. agora um cliente antigo precisa de um sistema meu em 64 bits.
Ja baixei o harbour 3.0.35 (conforme indicacao pesquisada em seu site) e tambem ja baixei do harbour 3.2.0
Ja consegui compilar o meu sistema ( SEM ERRO ALGUM ) nas 2 versões do harbour que citei ( modo console ) tanto usando o HMG como pelo prompt comando usando o HBMK2, só nao sei porque a funcao setkeymouse que uso para associar uma area da tela a uma tecla de funcao nao funciona.
Se aciono a tecla manualmente da certo, se clico com o mouse na area desejada nada acontece.

Exemplo do programa TESTE.PRG

Código: Selecionar todos

#include "vlib.prg"

***********
func main()
***********

cls
setmode(25,80)
set eventmask to 1002

set key -15 to rot() && Shift F6
setkeymouse(-15, { 10,13,0,3 })

a=space(05)
@ 10,0 to 13,3 && quadrado na area da tela para clicar com o mouse e que nao funciona

@ 14,0 get a
read

return nil

********
func rot
********

clear
? "deu certo"
wait
clear gets
return(.t.)

Exemplo do BAT no prompt de comando
@echo off
set path=c:\hmg.3.0.35\harbour\bin;c:\hmg.3.0.35\include;c:\hmg.3.0.35\mingw\bin;%path%
set hb_compiler=mingw
hbmk2 -oteste -inc -compr=yes -quiet -rebuild -lxhb -lhbwin -lhbct -gui teste.prg

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 22 Jul 2015 23:15
por JoséQuintas
Infelizmente não dá pra saber se 1002 está correto. Por coincidência é o código do click do mouse, que se for essa a intenção está errado.

Tente:

Código: Selecionar todos

#include "inkey.ch"
Set( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE )

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 23 Jul 2015 09:41
por Toledo
Amigo, encontrei aqui um DEMO da VisualLIB para Harbour, onde esta função SetKeyMouse() funciona certinho, veja no DEMO em anexo as teclas F1 e F10.

Obs.: não sei de onde eu peguei este DEMO, então os créditos vão para o autor desconhecido.

Abraços,

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 23 Jul 2015 19:58
por rrb info
Boa noite pessoal.
Jose Quintas, 1002 equivale a K_LBUTTONDOWN e com este comando funciona tudo no meu programa ( MENU, GET, ETC ) só o setkeymouse() não dá o resultado de marcar uma área da tela.
Toledo, o ZIP que me indicou é o que uso, com a diferença que no final da VLIB, antes de #INCLUDE "HBAPI.H" tive de incluir #INCLUDE "HBGTWVW.H" e #INCLUDE "HBGTWVT.H" senão dá erro nas linhas 1025 e 1026 de HBAPI.H. O exemplo do F1 e F10 é o que preciso, só que ao compilar em HARBOUR o DEMO, não funciona ( em CLIPPER fica OK ), já que a VISUAL2.CH pelo que vi no FORUM não funciona com HARBOUR, o máximo que consegui quando coloquei ela foi a tela ficar cinza e o programa trava.
Então pergunto, em modo console, sem nada de modo gráfico, não existe outro comando que seja do HARBOUR que posso colocar e que substitua o setkeymouse()
Grato a todos

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 23 Jul 2015 20:07
por JoséQuintas
Foi isso que eu quis dizer.
Opções, direto do inkey.ch:

Código: Selecionar todos

#define INKEY_MOVE              1
#define INKEY_LDOWN             2
#define INKEY_LUP               4
#define INKEY_RDOWN             8
#define INKEY_RUP               16
#define INKEY_MMIDDLE           32  /* Harbour extension middle button mask */
#define INKEY_MWHEEL            64  /* Harbour extension mouse wheel mask */
#define INKEY_KEYBOARD          128
#define INKEY_ALL               ( INKEY_KEYBOARD + INKEY_MOVE + INKEY_LDOWN + INKEY_LUP + INKEY_RDOWN + INKEY_RUP + INKEY_MMIDDLE + INKEY_MWHEEL )

#define HB_INKEY_RAW            256 /* Harbour extension */
#define HB_INKEY_GTEVENT        1024 /* Harbour extension */
#define HB_INKEY_EXT            2048 /* Harbour extension */

#define HB_INKEY_ALL            ( INKEY_ALL + HB_INKEY_GTEVENT )
A primeira coisa é verificar se está usando o código correto de evento.
Não é indicar o click do mouse que faz liberar o click do mouse.
E à primeira vista, 1002 é liberar um conjunto dessas coisas - ou ser considerado inválido e não fazer nada.

Alternativas:
Uma delas seria configurar o InkeyFilter pra uma rotina sua.
Ao teclar com o mouse, comparar com todas as regiões definidas e já retornar a tecla equivalente.
Provavelmente igual já tem no fonte.

Talvez também um SET KEY para o equivalente ao click do mouse.

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 23 Jul 2015 21:34
por Toledo
rrb info escreveu:O exemplo do F1 e F10 é o que preciso, só que ao compilar em HARBOUR o DEMO, não funciona ( em CLIPPER fica OK )
Amigo, no ZIP que está em anexo na minha mensagem anterior já tem o DEMO.EXE que eu compilei com o Harbour 3.2, execute ele e vai notar que está funcionando certinho quando clica em cima do "F1 Sobre" e "F10 Sair", então funciona sim compilado com o Harbour.

Dentro do ZIP tem também o arquivo compile.bat que eu usei para compilar este DEMO.

Abraços,

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 24 Jul 2015 11:31
por rrb info
Bom dia Toledo
Tentei recompilar aqui o exemplo que me enviou mais vi que não tenho GTWVW.LIB
Tentei gerar usando HBMK2 GTWVW.HBC e criou LIBGTWVW.A e não GTWVW.LIB
A mensagem que dá ao final do comando acima é:
hbmk2: Processando opcoes do ambiente: -compiler=mingw
hbmk2: Alvo atualizado: lib\win\mingw\libgtwvw.a

Por favor, já que você tem ela, não dá para envia-la para mim, pois estou vendo que os comandos que podem estar faltando para o setkeymouse() funcionar podem ser exatamente os vários comandos wvw_??? que tem no demo.prg
Se tiver também GTWVT.LIB e outras, desde já agradeço

Abraço

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 24 Jul 2015 17:54
por Toledo
rrb info escreveu:Tentei recompilar aqui o exemplo que me enviou mais vi que não tenho GTWVW.LIB
Tentei gerar usando HBMK2 GTWVW.HBC e criou LIBGTWVW.A e não GTWVW.LIB
Amigo, você está compilando com o MingW, neste caso os arquivos de bibliotecas não tem a extensão LIB, tem um prefixo LIB e a extensão é .A (libgtwvw.a).

Então, se você entrar na pasta \lib\win\mingw\ do seu Harbour, vai notar que já existe a LIB libgtwvw.a e provavelmente a libgtwvt.a.
rrb info escreveu:Ja baixei o harbour 3.0.35
Acho que você queria dizer que baixou a HMG 3.0.35 (MiniGui), neste caso, a versão do Harbour que vem com esta versão da MiniGui é a 2.0.0, é muito antiga. Hoje temos o Harbour 3.2 ou 3.4.
Nesta versão do Harbour 2.0.0 não tem a libgtwvw.a, então se você for compilar com a HMG 3.0.35 este DEMO da VisualLIB, não vai funcionar. Você teria que compilar com o Harbour 3.2 ou 3.4.

Abraços,

SetKeyMouse da VLIB não funciona com Harbour

Enviado: 25 Jul 2015 19:46
por rrb info
Boa noite pessoal

Grande Toledo, meu precioso GURU :{ , para variar você estava certo, tinha coisa do hmg.3.0.35 interferindo no hb3.2.
Consegui compilar o seu DEMO e resolvi meu problema do SETKEYMOUSE() tambem, só que usando o hb3.2
Segue alguns toques para os amigos que possam a vir ter o mesmo problema que o meu.

-Primeiro, a VISUAL2.CH não funciona se na linha de compilação do HBMK2 não tiver -gtwvw ( vai compilar, mas ao executar o sistema ele vai travar )
-Segundo, o SETKEYMOUE() só funciona com o VLREAD da VISUAL2.CH
-Terceiro, o VLIB.PRG tem que estar na linha de compilação e não ser chamado atraves do #include "VLIB.PRG"
-Quarto, o que mais traria trabalho é ter de mudar no sistema inteiro, onde se tem o comando READ mudar para VLREAD, mais isto se resolve com #command read => vlread

Grato a todos

Valeu :))