Ejecutar codigo en boton presionado repetidamente.

240 views
Skip to first unread message

Antonio Meza

unread,
Nov 14, 2012, 5:45:58 PM11/14/12
to publice...@googlegroups.com
Hola!!!

Hay alguna forma de repetir el código o en que evento se debe poner, para que el usuario al hacer click con el mouse sobre un botón y lo mantenga presionado se repita cierto código, ya que no eh logrado ese efecto y eh puesto el código en todos los eventos mouse pero solo lo hace una vez por lo que tendría que estar dando varios click

saludos
Antonio Meza

ZeRoberto

unread,
Nov 14, 2012, 6:15:17 PM11/14/12
to publice...@googlegroups.com
MouseDown y MouseUp

Antonio Meza

--
 
 
 

Antonio Meza

unread,
Nov 14, 2012, 6:34:25 PM11/14/12
to publice...@googlegroups.com
Ya los use pero solo ejecutan el codigo una vez, y lo que deseo es que se ejecute repetidamente hasta soltar el click del mouse, algo parecido al efecto si mueven una barra lateral y horizontal de internet si das click la flecha avanza de uno la barra pero si la mantiene presionada la barra avanza, algo asi necesito hacer con el click del mouse.

saludos

ZeRoberto

unread,
Nov 14, 2012, 6:38:54 PM11/14/12
to publice...@googlegroups.com
Al momento de presionar (MouseDown) activa un timer que vaya llenando tu textbox cada n segundos, y cuando sueltas (MouseUp) desactivas el timer

Prueba eso, no se me ocurre otra idea



--
 
 
 

Walter R. Ojeda Valiente

unread,
Nov 14, 2012, 6:49:05 PM11/14/12
to publice...@googlegroups.com
No es tan sencillo, porque de esa manera se ejecutaría solamente una vez el código y él quiere que se repita hasta que se deje de presionar el botón del mouse.

Una posible solución es la siguiente:
1. Se le agrega al formulario la propiedad LCONTINUAR
2. Se le agrega al formulario la propiedad NVECES y se la inicializa con el valor 0 (cero)
3. Se agrega un control TIMER al formulario
4. Se pone la propiedad ENABLED del TIMER en .F.
5. En la propiedad INTERVAL del TIMER se pone 1
6. En el evento TIMER() del TIMER se escribe:
      ThisForm.Command1.MouseDown()
7. En el evento MOUSEDOWN() del botón Command1 se escribe:
      with ThisForm
         .Timer1.Enabled = .T.
         .lContinuar = iif(.nVeces == 0, .T., .lContinuar)
         if .lContinuar
            .nVeces = .nVeces + 1
            WAIT WINDOW Transform(.nVeces) NOWAIT
         endif
      endwith
8. En el evento MOUSEUP() del botón Command1 se escribe:
      with ThisForm
         .Timer1.Enabled = .F.
         .lContinuar = .F.
         .nVeces = 0
      endwith

El efecto de todo el código anterior será mostrar números muy rapidamente, hasta que se suelte (se deje de presionar) el botón del mouse.

Por supuesto que en lugar del comando WAIT WINDOW él puede escribir lo que quiera.

Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Thu, 15 Nov 2012 00:15:17 +0100
Subject: Re: [vfp] Ejecutar codigo en boton presionado repetidamente.
From: zero...@gmail.com
To: publice...@googlegroups.com
--
 
 
 

Antonio Meza

unread,
Nov 14, 2012, 7:18:34 PM11/14/12
to publice...@googlegroups.com
Muchas gracias Walter por tan detallado proceso, voy a probar el codigo y gracias a Roberto por las ideas.

saludos y gracias nuevamente!!!

Claudio Luna

unread,
Nov 14, 2012, 7:30:22 PM11/14/12
to Comunidad de Visual Foxpro en Español
Antonio,
Te comento otra forma de realizarlo(usando un timer y un metodo del formulario)
En el mousdown del boton l poner:
thisform.timer1.enabled = .t.
En el boton mouseup del boton poner :
thisform.timer1.enabled = .f.
En el timer en el evento timer()  poner
thisform.mimetodo()
asignar el interval a los milisegundos que se quiera ejecutar el metodo mimetodo()
en mimetodo pones lo que tenías en el evento click del boton.
Espero que te sirva saludo
 


--
 
 
 

Antonio Meza

unread,
Nov 14, 2012, 7:51:18 PM11/14/12
to publice...@googlegroups.com
Efectivamente así fue exactamente como quedo y ya funciona, pero la idea del código detallado de Walter me ayudo mucho y el comentario de Roberto que era igual pero de forma general, la verdad no tenia la mas mínima idea de como hacerlo jejej

saludos y gracias a todos

Walter R. Ojeda Valiente

unread,
Nov 14, 2012, 9:16:44 PM11/14/12
to publice...@googlegroups.com
Ya ves, ya ves, como dice el viejo dicho: "cada día se aprende algo nuevo"

Así que ya cumpliste con tu cuota de aprendizaje diario.

:-)


Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Wed, 14 Nov 2012 16:51:18 -0800
From: solv...@gmail.com
To: publice...@googlegroups.com
--
 
 
 

Robert Martínez

unread,
Nov 14, 2012, 11:30:18 PM11/14/12
to publice...@googlegroups.com

Prueba con esto para ver si es lo que necesitas,


oForm = CREATEOBJECT("form1")
oForm.show(1)


**************************************************
*-- Form:         form1 (c:\negocios\newprojects\super\nominag\formprueba.scx)
*-- ParentClass:  form
*-- BaseClass:    form
*-- Time Stamp:   11/15/12 12:23:00 AM
*
DEFINE CLASS form1 AS form


    Top = 0
    Left = 0
    Height = 367
    Width = 525
    DoCreate = .T.
    Caption = "Form1"
    contador = 0
    Name = "Form1"


    ADD OBJECT command1 AS commandbutton WITH ;
        Top = 26, ;
        Left = 379, ;
        Height = 40, ;
        Width = 84, ;
        Caption = "Press Me", ;
        Name = "Command1"


    ADD OBJECT timer1 AS timer WITH ;
        Top = 35, ;
        Left = 466, ;
        Height = 23, ;
        Width = 23, ;
        Enabled = .F., ;
        Interval = 500, ;
        Name = "Timer1"


    PROCEDURE command1.MouseDown
        LPARAMETERS nButton, nShift, nXCoord, nYCoord
        thisform.timer1.Enabled = .T.
    ENDPROC


    PROCEDURE command1.MouseUp
        LPARAMETERS nButton, nShift, nXCoord, nYCoord

        thisform.timer1.Enabled = .F.
    ENDPROC


    PROCEDURE timer1.Timer
         *** Aqui puedes poner lo que quieres que se repita cuando presiona el boton.

         thisform.contador = thisform.contador +1
         ? "Cantidad: " + STR(thisform.contador)
    ENDPROC


ENDDEFINE
*
*-- EndDefine: form1
**************************************************

Antonio Meza

unread,
Nov 15, 2012, 8:32:09 PM11/15/12
to publice...@googlegroups.com
jajaja esa estuvo buena Walter, solo que voy a necesitar aprender mas cosas en un dia jajaja

saludos!!!

Antonio Meza

unread,
Nov 15, 2012, 8:33:49 PM11/15/12
to publice...@googlegroups.com
Gracias Roberto algo parecido a tu ejemplo es lo que necesitaba pero ya lo había resuelto, muchas gracias de todas formas!!

saludos!!
Reply all
Reply to author
Forward
0 new messages