Página 1 de 2
Uso de funções da Mouse Library do Clipper
Enviado: 12 Set 2013 15:20
por billy1943
Nos meus vários sistemas em Clipper, usei e abusei das funções abaixo da Mouse Library que estão em C ou Assembler;
a) M_INIT() - inicializa o driver do mouse;
b) M_SHOW() - mostra o cursor do mouse;
c) M_HIDE() - oculta cursor do mouse;
d) M_STAT() - indica o status dos botões do mouse ;
e) M_XPOS() - coordenada x do cursor do mouse;
f) M_YPOS() - coordenada y do cursor do mouse.
Essas rotinas foram usadas no getsys.prg e outros que modifiquei.
Simplesmente agregava o clipmous.obj para que fossem linkadas pelo Blinker.
Tentando agora passar um desses sistemas para HMG, defrontei-me com o problema de que essas funções por não estarem Clipper não são assumidas e nem existem nos fontes disponibilizados na compilação.
Como contornar essa falta ?
Existem essas funções no Harbour para que eu as possa substituir ?
Uso de funções da Mouse Library do Clipper
Enviado: 12 Set 2013 15:43
por Jairo Maia
Olá Billy,
No Harbour tem as funções equivalentes. Para você ter melhor idéia, use o xHarbour Language Reference Guide, digite na busca: mouse, depois clique em: mouse functions. Você terá todas as funções de mouse.
Uso de funções da Mouse Library do Clipper
Enviado: 12 Set 2013 18:17
por billy1943
Oi, Jairo
Achei no Guia de referência da Linguagem XHarbour, as funções de mouse e as verifiquei atentamente na sua sintaxe e o que elas retornam.
Ocorre que somente as funções
MSHOW e
MHIDE são usadas da mesma forma que o
Clipper faz.
As funções
M_INIT e
M_STAT precisam retornar um valor numérico, como poderá ser visto no trecho do fonte (GETSYS.PRG), em
Clipper, abaixo.
Deduzi que as correspondentes no XHarbour seriam as funções
SETMOUSE e
MSAVESTATE, respectivamente.
Mas o retorno delas não é numérico em nenhum dos casos.
Assim, solicitaria que me informassem se estou certo na minha suposição ou não, ou ainda quais seriam as funções adequadas para
a finalidade de que necessito.
Código: Selecionar todos
FUNCTION IN_KM(w_0)
LOCAL rez,mstat
IF TYPE("is_mpresent")<>"L"
PUBLIC is_mpresent := ( M_INIT() <> 0 )
ENDIF
IF is_mpresent
m_show()
ENDIF
DO WHILE .T.
IF (rez:=INKEY())<>0
EXIT
ENDIF
IF is_mpresent.AND.(mstat:=M_STAT())<>0
IF w_0=Nil.OR.w_0
DO WHILE M_STAT()<>0
ENDDO
ENDIF
rez=mstat+500
EXIT
ENDIF
ENDDO
IF is_mpresent
m_hide()
ENDIF
RETURN rez
Uso de funções da Mouse Library do Clipper
Enviado: 13 Set 2013 18:00
por Jairo Maia
Billy, acho que igual não vai ter, mas precisa adaptar com as similares. Por exemplo:
Código: Selecionar todos
Function M_STAT()
Local nBotao := 0
If MLeftDown()
nBotao := 1
ElseIf MRightDown()
nBotao := 2
EndIf
Return ( nBotao )
Uso de funções da Mouse Library do Clipper
Enviado: 13 Set 2013 18:49
por billy1943
RESOLVIDO.
Consegui compilar o primeiro sistema de Clipper no HMG.
Obrigado novamente ao Jairo Maia pela atenção dada a este incipiente aprendiz de XHarbour.
Obs: a função a constar em M_INIT é MPresent()
Uso de funções da Mouse Library do Clipper
Enviado: 14 Set 2013 15:02
por cjp
Amigos, existe algo equivalente no Harbour também, ou só para o Xharbour? Eu gostaria de acrescer o uso do mouse nas minhas funções, se for algo simples.
Uso de funções da Mouse Library do Clipper
Enviado: 14 Set 2013 19:01
por Pablo César
cjp escreveu:Amigos, existe algo equivalente no Harbour também, ou só para o Xharbour? Eu gostaria de acrescer o uso do mouse nas minhas funções, se for algo simples.
Por favor LEIA com mais atenção:
billy1943 escreveu:RESOLVIDO.
Consegui compilar o primeiro sistema de Clipper no HMG.
HMG = HARBOUR
Uso de funções da Mouse Library do Clipper
Enviado: 15 Set 2013 00:04
por cjp
Peço desculpa pela minha ignorância, Fabio, mas eu imaginei que HMG fosse apenas em modo gráfico.
Testei a solução apresentada, mas está dando falta das funções m_show() e m_hide().
Também gostaria de saber como chamar a função de dentro do meu programa, para fazer funcionar o mouse.
Uso de funções da Mouse Library do Clipper
Enviado: 15 Set 2013 08:56
por Jairo Maia
Olá Inácio,
Quanto a falta das funções, acrescente em seu sistema as funções faltantes como abaixo:
Nota aos colegas:
Após habilitar as rotinas do Mouse, verifiquem no gerenciador de tarefas o uso de CPU. Se estiver em 100% mesmo quando o aplicativo estiver em
repouso, será necessário pequenos ajustes e estes ajustes dependem das respectivas funções que capturam os eventos do mouse. Mas são simples de ajustar.
Uso de funções da Mouse Library do Clipper
Enviado: 16 Set 2013 01:01
por cjp
Deu certo, Jairo.
Mas ainda não consegui habilitar efetivamente o mouse.
Como chamar a função exatamente?
Uso de funções da Mouse Library do Clipper
Enviado: 16 Set 2013 02:45
por Jairo Maia
Olá Inácio,
Para um sistema trabalhar com Mouse em modo console, ele precisa ser planejado para isso, ou claro, ser alterado para capturar os eventos do mouse. Não basta usar o comando
SET EVENTMASK INKEY_ALL (que não é o caso aqui), precisa tratar os eventos. Num aplicativo gráfico, ele é automaticamente montado para uso de mouse.
Mas para que você passe a ter uma idéia de como isso funciona, veja o exemplo abaixo, mas veja também, que é um exemplo simples, e portanto em qualquer ponto que você pressionar o mouse vai ter efeito, pois não tem área de evento delimitada, sendo a tela toda. Observe que a função
Inkey() está embutida na função
MyInkey() que retorna a tecla digitada ou evento do mouse:
Código: Selecionar todos
Function Main()
Clear Screen
@ 3,2 say "Pressione alguma tecla ou o Mouse..."
While LastKey() != 27
nTecla := MyInkey()
cMsg := "Voce pressionou a tecla: " + Chr( nTecla )
cMsg += " - " + Hb_NToS( nTecla ) + Space( 20 )
@ 5,2 say cMsg
EndDo
SetPos( 10, 1 )
Return Nil
Function MyInkey()
While Inkey( .01 ) = 0 // .01 para desacelerar o processador...
@ 7,2 say MRow()
@ 8,2 say MCol()
If MLeftDown()
Hb_KeyPut( 13 )
ElseIf MRightDown()
Hb_KeyPut( 27 )
EndIf
EndDo
Return LastKey()
Uso de funções da Mouse Library do Clipper
Enviado: 17 Set 2013 00:15
por cjp
Entendi a lógica, meu caro.
Só fiquei com uma dúvida: como faço para delimitar a área do evento pro mouse? Imagine um menu com @...prompt, por exemplo. Como mudo ele para permitir usar o mouse para selecionar no menu?
Uso de funções da Mouse Library do Clipper
Enviado: 17 Set 2013 14:36
por Jairo Maia
Olá Inácio,
Pelo que sei, as funções MENU TO, ACHOICE e ALERT delimitam automaticamente a área de eventos, embora não use nenhuma delas. Mas você poderia postar um exemplo de menu que você usa? Acho que fica mais fácil exemplificar.
Uso de funções da Mouse Library do Clipper
Enviado: 17 Set 2013 23:50
por cjp
Uso menus simples, como este:
Código: Selecionar todos
@ 2,0 TO 2,maxcol() DOUBLE
@ 1,1 PROMPT "Finalizar"
@ 1,15 PROMPT "Ag.financeira"
@ 1,35 PROMPT "Contas bancárias"
@ 1,51 PROMPT "Telefones"
@ 1,65 PROMPT "Compromissos"
MENU TO OPC
Mas, se era pra ser automático, aqui não está funcionando.
Uso de funções da Mouse Library do Clipper
Enviado: 18 Set 2013 02:48
por Jairo Maia
Olá Inácio,
Pois é... O Alert() define a área automaticamente, o MENU TO não... Vai entender.
Mas de qualquer forma, de uma olhada no menu abaixo montado com seu exemplo. Veja que o mouse funciona quase 100%. Quase pq se o usuário clica entre duas opções na linha 1, a opção marcada é selecionada.
PS: Para Este caso, usei
SET EVENTMASK. Use duplo clique para testar.
Para compilar use:
Hbmk2 nome_teste -lxhb
Código: Selecionar todos
#include "inkey.ch"
#include "hbgtinfo.ch"
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WVT_DEFAULT
Function Main()
HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')
HB_GtInfo( HB_GTI_MAXIMIZED, .T. )
HB_GtInfo( HB_GTI_FONTNAME, "Lucida Console" )
HB_GtInfo( HB_GTI_WINTITLE, "Teste para Mouse" )
/*
habilita o mouse...
*/
SET EVENTMASK TO HB_INKEY_ALL
While LastKey() != K_ESC
Clear Screen
DispBox( 0, 1, 2, MaxCol(), Nil, "GR+/N" )
DispBox( 3, 1, MaxRow(), MaxCol(), Nil, "G+/N" )
@ 1,3 PROMPT "Finalizar"
@ 1,16 PROMPT "Ag.financeira"
@ 1,32 PROMPT "Contas bancárias"
@ 1,52 PROMPT "Telefones"
@ 1,66 PROMPT "Compromissos"
MENU TO OPC
/*
Como em Harbour a função MSetBounds() não funciona,
em Harbour tem que definir a area na unha...
*/
If MRow() != 1
Loop
ElseIf LastKey() != K_ESC
Alert( "Você clicou na opção: " + Hb_NToS( opc ) )
EndIf
EndDo
Return Nil