Uso de funções da Mouse Library do Clipper

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

Moderador: Moderadores

Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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 ?
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.
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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.
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
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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_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)
Avatar do usuário
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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()
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Uso de funções da Mouse Library do Clipper

Mensagem 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.
Inacio de Carvalho Neto
Avatar do usuário
Pablo César
Usuário Nível 7
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

Mensagem 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
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.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Uso de funções da Mouse Library do Clipper

Mensagem 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.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Uso de funções da Mouse Library do Clipper

Mensagem por Jairo Maia »

Olá Inácio,

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()
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.
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Uso de funções da Mouse Library do Clipper

Mensagem por cjp »

Deu certo, Jairo.

Mas ainda não consegui habilitar efetivamente o mouse.

Como chamar a função exatamente?
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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()
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Uso de funções da Mouse Library do Clipper

Mensagem 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?
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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.
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)
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Uso de funções da Mouse Library do Clipper

Mensagem 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.
Inacio de Carvalho Neto
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Uso de funções da Mouse Library do Clipper

Mensagem 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
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)
Responder