Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

TripleClick

Estas en el tema de TripleClick en el foro de Visual Basic clásico en Foros del Web. Saludos amigos. ¿Alguien sabe como capturar el TripleClick en VB6, en ejecución? Ejemplo: En un procesador de textos word, si hacemos dobleclick sobre una palabra ...
  #1 (permalink)  
Antiguo 15/06/2006, 11:10
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Pregunta TripleClick

Saludos amigos.

¿Alguien sabe como capturar el TripleClick en VB6, en ejecución?

Ejemplo: En un procesador de textos word, si hacemos dobleclick sobre una palabra perteneciente a un párrafo, resaltará la palabra; pero, si hacemos tripleclick, resaltará el párrafo completo.

¿Es posible capturar este "evento" de alguna forma en VB6?

Gracias
  #2 (permalink)  
Antiguo 16/06/2006, 00:22
 
Fecha de Ingreso: abril-2004
Mensajes: 192
Antigüedad: 20 años
Puntos: 0
Hiola creo que Windows debe poder interceptar este mensaje via Api, ..si no se tendria que hacer mediante timers y variaciones de tiempo entre clicks,... pero no tengo la masputa idea

salu2
__________________
Recursos visual basic
  #3 (permalink)  
Antiguo 17/06/2006, 21:33
 
Fecha de Ingreso: mayo-2006
Mensajes: 13
Antigüedad: 17 años, 11 meses
Puntos: 0
Y si no siempre puedes emularlo:
En el evento del doble click inicias por ejemplo un timer con la espera(delay.. unos 300 ms le irian bien) que le quieras dar entre el 2º y 3º click. Ese timer cuando transcurra el tiempo y se active lo que hara sera simplemente desactivarse.
Ahora ya en el evento de un solo click compruebas si el timer esta enabled(ahi debes desactivar el timer) o no, eso te deberia permitir saber si ha hecho un doble click anteriormente.

Mejor que el timer seria coger los ticks en el momento que haces doble click, y compararlo a los que haya cuando vuelva a hacer click, ya que el timer puede dar problemas si haces click muy rapido muchas veces, pero ahora no recuerdo como se cogian los ticks en vb 6.. gettickcount o algo asi??

Espero haberte ayudado
  #4 (permalink)  
Antiguo 17/06/2006, 23:09
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 3 meses
Puntos: 3
No hace falta el Timer, un control aunque parezca insignificativo llevan muchas lineas detras de el y desperdiciamos recursos innesesariamente, la alternativa, la siguiente...

Dim Veces As Byte, Tiempo As Byte
Private Sub Form_Load()
Veces = 0
Tiempo = Second(Now)
End Sub
Private Sub Text1_Click()
Detectar
End Sub
Private Sub Text1_DblClick()
Detectar
End Sub
Function Detectar()
If Abs(Second(Now) - Tiempo) < 1.3 Then '1.3 es el seg. que se le da para esperar al otro clic (buscar el tiempo que mejor se adapte)
Veces = Veces + 1
Else
Veces = 0
End If
Tiempo = Second(Now)

If Veces = 2 Then
MsgBox "Se presionaron tres clic seguidos dentro de los 1.3 seg."
' Aqui va el resto del codigo....
Veces = 0
End If
End Function

' Una variable toma el segundo actual en que presionas una vez, y se llena un contador de clics(otra variable), al llegar a tres automaticamente se ejecuta el codigo deseado, la parte de resaltar el parrafo o lo deseado corresponde a otro tema, si las dudas persisten no dudes en preguntar

CONSEJO: Yo use el seg del ultimo clic y el reloj de windows para sacar la diferencia de tiempo pero existe un posible problema si los clics consecutivos llegaran a estar en los segundos cercanos al 59. O sea, si presionamos una vez en el seg. 58, otro en el seg 59 la resta de ambos da 1 por lo tanto la variable Veces cambia de valor, pero si luego el tercer clic lo damos en el seg 0 la diferencia sera (59 - 0) = 59 <> 1.3 lo que hace que no sume la variable Veces.


Espero que se alla entendido todo Bye!!!!...
  #5 (permalink)  
Antiguo 18/06/2006, 03:41
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
yo no soy de VB pero haria esto:

una variable llamada click_count = 0

evento MouseUP aumentar esta vaiable:
click_count = click_count + 1
si click_count es igual a 1
timer.enable
fin si
si click_count es igual a 3.
click_count = 0
timer.disable
'si es asi entonces significa que es un triple click.
haces lo que tienes que hacer
fin si
fin evento

evento timer()
click_count = 0
timer.disable
fin evento

cada determinado tiempo click_count se reiniciara, y al finalizar el triple click

podrias usar en lugar del timer el metodo de tiempos restados planteado por piojoman.

evento MouseUP
click_count = click_count +1
si click_count = 1
Tiempo = Second(Now)
fin si

si click_count = 2
si Abs(Second(Now) - Tiempo) > 1.3
Tiempo = Second(Now) '''iniciar el nuevo triple click
click_count = 1
fin si
fim si

si click_count = 3
si Abs(Second(Now) - Tiempo) < 1.3
click_count = 0
'hacer lo que tengas que hacer
else
Tiempo = Second(Now) '''iniciar el nuevo tripoe click
click_count = 1
fin si
fin evento


ahi esta no estoy seguro si este correcto la idea es esa.
Saludos.

Última edición por Nivel7; 18/06/2006 a las 04:01
  #6 (permalink)  
Antiguo 19/06/2006, 01:49
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Sonrisa Muchas gracias

Muchas gracias a todos por sus respuestas.

El código planteado por piojoman funciona perfectamente.

El código planteado por Nivel7 también, poniendo en la propiedad interval, del timer: 500. Quedando algo como esto:

Dim click_count As Integer

Private Sub Text1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
click_count = click_count + 1
If click_count = 1 Then
Timer1.Enabled = True
End If
If click_count = 3 Then
click_count = 0
MsgBox "Hola Mundo"
Timer1.Enabled = False
End If
End Sub

Private Sub Timer1_Timer()
click_count = 0
Timer1.Enabled = True
End Sub


Muchas gracias a todos

Salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:35.