Uso de funções da Mouse Library do Clipper
Moderador: Moderadores
Uso de funções da Mouse Library do Clipper
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 ?
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 ?
Editado pela última vez por Toledo em 14 Set 2013 07:26, em um total de 1 vez.
Razão: O presente tópico foi movido da seção MiniGui, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com a MiniGui.
Razão: O presente tópico foi movido da seção MiniGui, uma vez que seu conteúdo não tem relação com os objetivos daquela seção, onde só podem constar dúvidas técnicas de programação diretamente relacionadas com a MiniGui.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Uso de funções da Mouse Library do Clipper
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.
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.
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)
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)
Uso de funções da Mouse Library do Clipper
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.
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 rezO bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Uso de funções da Mouse Library do Clipper
Billy, acho que igual não vai ter, mas precisa adaptar com as similares. Por exemplo:
Código: Selecionar todos
Function M_INIT()
Return If( MPresente(), 1, 0 )Código: Selecionar todos
Function M_STAT()
Local nBotao := 0
If MLeftDown()
nBotao := 1
ElseIf MRightDown()
nBotao := 2
EndIf
Return ( nBotao )Código: Selecionar todos
Function M_XPOS()
Return MRow()Código: Selecionar todos
Function M_YPOS()
Return MCol()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)
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)
Uso de funções da Mouse Library do Clipper
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()
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()
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Uso de funções da Mouse Library do Clipper
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.
Inacio de Carvalho Neto
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Uso de funções da Mouse Library do Clipper
Por favor LEIA com mais atenção: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.
HMG = HARBOURbilly1943 escreveu:RESOLVIDO.
Consegui compilar o primeiro sistema de Clipper no HMG.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Uso de funções da Mouse Library do Clipper
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.
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.
Inacio de Carvalho Neto
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Uso de funções da Mouse Library do Clipper
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.
Quanto a falta das funções, acrescente em seu sistema as funções faltantes como abaixo:
Código: Selecionar todos
Function M_SHOW()
Return MShow()Código: Selecionar todos
Function M_Hide()
Return MHide()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.
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)
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)
Uso de funções da Mouse Library do Clipper
Deu certo, Jairo.
Mas ainda não consegui habilitar efetivamente o mouse.
Como chamar a função exatamente?
Mas ainda não consegui habilitar efetivamente o mouse.
Como chamar a função exatamente?
Inacio de Carvalho Neto
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Uso de funções da Mouse Library do Clipper
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:
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()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)
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)
Uso de funções da Mouse Library do Clipper
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?
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?
Inacio de Carvalho Neto
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Uso de funções da Mouse Library do Clipper
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.
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.
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)
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)
Uso de funções da Mouse Library do Clipper
Uso menus simples, como este:
Mas, se era pra ser automático, aqui não está funcionando.
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
Inacio de Carvalho Neto
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Uso de funções da Mouse Library do Clipper
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
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 NilAbraç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)
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)

