Duplo clique não funciona
Enviado: 01 Mar 2021 10:57
Hoje eu uso o hb_gtInfo( HB_GTI_INKEYFILTER.... mas se quiser alguma coisa mais simples pode usar essa função que fiz a alguns anos e que identifica o duplo clique do botão esquerdo.
Ele tem um delay de .3 segundos mas passa despercebido dependendo onde usa.
Ele tem um delay de .3 segundos mas passa despercebido dependendo onde usa.
Código: Selecionar todos
/ Compilar HBMK2 DP_CLIC
#include "inkey.ch"
Function Main()
CLS
SET( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE ) // + HB_INKEY_GTEVENT ) // Set Eventmask to 1002
DO WHILE .T.
@ 10,05 Say "De clic unico ou duplo com o botao esquerdo do mouse.!"
INKEY(0)
IF LASTKEY()=1002 // So efetua a verificacao qdo clicar no botao esquerdo do mouse
IF !DUPLO_CLIC()
// colocar aqui as ações para unico clique do botao esquerdo..
// No caso do DbEdit ou Achoice a opcao seria voltar para a edicao com return pois com um clic apenas selecionamos a linha/coluna.
ALERT("Clicou uma vez com o botao esquerdo")
else // Se clicou duas vezes, entao ele volta com lastkey()=1006
// colocar aqui as ações para duplo clique do botao esquerdo..
ALERT("Clicou duas vezes com o botao esquerdo")
ENDIF
ENDIF
if lastkey()=27
return
endif
ENDDO
**
** Funcao que testa se houve duplo click no botao esquerdo do mouse
**
FUNCTION DUPLO_CLIC()
local AAA,BBB
IF LASTKEY()=1006 // Se ja for detectado, entao volta .T.
RETURN .T.
ENDIF
IF !(LASTKEY()=1002) // Se o lastkey() nao for 1002 (botao esquerdo) , entao volta .F.
RETURN .F.
ENDIF
*alert("clicou 2 vezes"+str(lastkey()))
BBB=SECOND()
AAA=lastkey()
DO WHILE BBB+.3 > SECOND() // Fica aguardando em .3 segundos o segundo clicque
IF LASTKEY()=1006
RETURN .T.
ENDIF
AAA=INKEY()
ENDDO
RETURN .F. // Nao foi clicado pela segunda vez no botao esquerdo durante o tempo de espera...