[ Asmir86 @ 30.05.2007. 19:39 ] @
Pozdrav svima na forumu!

Imam jedno pitanje!

Kako da sa cmdbuton-om vrsim neku operaciju dok je ono pritisnuto, a kad ga "pustim" ta operacija prestaje sa radom?
[ Marko_L @ 30.05.2007. 20:27 ] @
Pa jedino što mi pada napamet je da ubaciš neku petlju u MouseDown event i prekineš je na MouseUp. Ovako nešto
Code:
Option Explicit
Dim a As Long
Dim Running As Boolean

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Running = True
Do While Running = True
DoEvents
a = a + 1
Loop
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Running = False
MsgBox a
End Sub
[ Shadowed @ 30.05.2007. 20:32 ] @
Ili Timer koji bi radio po istom principu. Mada, zavisi od toga sta treba da se izvrsava...
[ Sija @ 30.05.2007. 21:20 ] @
Ili dodaj microsoft forms 2.0 pa pokusaj sa ToggleButton. Ja njega koristim za te stvari.
[ Marko_L @ 30.05.2007. 22:20 ] @
ToggleButton radi po istom principu kao i CommandButton, osim što može da se ostavi ulegnutim, ali opet to neće vršiti nikakvu operaciju automatski dok je pritisnuto, osim ukoliko mu ne zadaš neku petlju, ili Timer kao što Shadowed reče, koji će da ponavlja zadatu operaciju dok je dugme pritisnuto...
[ Asmir86 @ 30.05.2007. 23:14 ] @
Ma probat cu nesto skrpit od toga
[ rgdrajko @ 31.05.2007. 00:30 ] @
Ili ovako.

Code:

Dim n As Long

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'Izvrsavanje nekog koda dok je misompritisnut command1 npr:
    For n = 1 To 1000000000
        DoEvents
    Next n
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'Izvrsavanje nekog koda se cim se pusti taster misa sa command1
    Print n
    'Stop
End Sub

Private Sub Form_Unload(Cancel As Integer)
    End
End Sub
[ dava @ 31.05.2007. 07:46 ] @
Evo konacno rjesenje:

Code:

Option Explicit

Dim n As Long
Dim a

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    T1.Enabled = True
    T1.Interval = 100
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Print n
    T1.Enabled = False
    n = 0
    a = 0
    Label1.Caption = ""
End Sub

Private Sub T1_Timer()
    For n = 1 To 1000000000
        If T1.Enabled = False Then
            Exit Sub
        Else
            DoEvents
            Call Pisi
            Debug.Print n
        End If
    Next n
End Sub

Public Sub Pisi()
If n >= a Then
    Label1.Caption = Label1.Caption & "a"
    a = a + 200
End If
End Sub


rgdrajko jesi li ti probao svoj kod?



[Ovu poruku je menjao dava dana 31.05.2007. u 08:58 GMT+1]
[ Marko_L @ 31.05.2007. 14:10 ] @
@rgdrajko
Zašto koristiti For...Next petlju tamo gde joj nije mesto ? For... Next se koristi onda kada postoji određeni broj ponavljanja, a traženo je da se operacija ponavlja neograničeno sve dok je pritisnut button. Pored toga, nisi obezbedio izlaz iz petlje što znači da će se operacija izvršiti milijardu puta bez obzira da li držiš button ili si ga pustio. Dakle, tvoje rešenje neće raditi ono što je traženo

@dava
Čemu korišćenje For... Next u Timer-u koji će ionako da se ponavlja u određenom intervalu. Totalno bespotrebno. Ako već hoće da koristi Timer, dovoljno je
Code:
Option Explicit

Dim n As Long

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    n = 0
    T1.Interval = 100
    T1.Enabled = True
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    T1.Enabled = False
    Print n
End Sub

Private Sub T1_Timer()
    n = n + 1
End Sub
[ rgdrajko @ 31.05.2007. 15:34 ] @
Nisam proveravao kod, pisao sam iz glave.
Evo resenja bez koriscenja timera.

Code:

Dim n As Long
Dim otpustenojedugme As Boolean

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static brojac
    'Izvrsavanje nekog koda dok je misompritisnut command1 npr:
    Do
        Label1.Caption = brojac
        If otpustenojedugme = True Then
            otpustenojedugme = False
            Exit Do
        End If
        brojac = brojac + 1
        DoEvents
   Loop
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'Izvrsavanje nekog koda se cim se pusti taster misa sa command1
    otpustenojedugme = True
End Sub

Private Sub Form_Load()
    Label1.Caption = "0"
    Command1.Caption = "Pritisni"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    End
End Sub
[ Asmir86 @ 31.05.2007. 20:15 ] @


Probat cu ovaj kod bez timera, pa cemo da vidimo kakav je rezultat
[ dava @ 01.06.2007. 07:52 ] @
@Marko_L nije bespotrebno. Na taj nacin sam rjesio da mogu da podesavam ucestalost neke radnje koja ce se izvrsavati. Uzmi moj kod i pokreni ga, a zatim promijeni onu vrijednost 200 u 2000 pa ga opet pokreni. ;)
[ Marko_L @ 01.06.2007. 13:05 ] @
Pa upravo zato je preloženo rešenje sa Timerom, da bi se podešavala učestalost izvršavanja operacije prostom promenom intervala. Ako nije potrebno tako nešto, onda je dovoljno iskoristiti Do... Loop petlju. Tvoje rešenje naravno radi, ali mi se čini da je bespotrebno zakomplikovano. U svakom slučaju, autor teme je dobio više rešenja i sa podesivom učestalošću izvršavanja i bez, pa nek iskoristi ono koje mu najviše odgovara. Ionako niko ne može da mu kaže šta će mu najbolje pasovati kada nije napisao šta zapravo hoće da napravi.
[ Asmir86 @ 01.06.2007. 18:28 ] @

Da dobio sam rjesenja i vise nego sam mislio da cu da dobijem. Hvala u svakom slucaju.
Program bi radio recimo ovako:

povecavanje brojeva dok je cmdbuton pritisnut

A je od 0-k recimo

Text1.text = A

gdje se 'k' povecava sve dok je cmdbuton pritisnut, a kad se "pusti" povecavanje brojeva prestaje.

Pa cu da vidim ove sve odgovore koji bi mo dobro odgovarao.

Hvala svima!
[ dava @ 02.06.2007. 09:08 ] @
Provjerio sam kod rgdrajko-a i vidjeo da neradi posao pa sam ga prepravio. Istina je da je moglo jednostavnije.
Pozdrav.

[ rgdrajko @ 02.06.2007. 11:40 ] @
Citat:
dava: Provjerio sam kod rgdrajko-a i vidjeo da neradi posao pa sam ga prepravio. Istina je da je moglo jednostavnije.
Pozdrav.


Uopste mi nisi jasan. Od svih primera si uzeo bas moj i kazes da ne radi posao pa si ga ti prepravio. Kako si mogao da ga prepravis ako ne radi posao? Program pefektno radi onako kako sam ja razumeo tvoj problem. Znam da je mnogo jednostavnije inace ga ne bih ni pravio. Uostalom postavi taj tvoj kod da vidimo kakve si ti to ogromne izmene izvrsio.
[ dava @ 02.06.2007. 13:33 ] @
Kad sam pogledao ovaj topic, procitao problem Asmir86, vidjeo da ima par ponudjenih rjesenja. Tvoj post je bio poslednji, otvorio VB, copy - paste tvog koda, kad ono beskonacna petlja. To savrseno radi samo ako si bas tako zamislio, kako kazes. Onda sam napravio par izmjena (imas kod par primjera prije) i rjesio problem Asmir86.
Marko_L je ukazao na ne optimisticnost koda tj. da je moglo sa manje koda sto je u redu, postujem.

Ne znam samo zasto si se ti uvrijedio? Inace provjeri kod radi li, prije nego sto ga okacis na forum.
[ rgdrajko @ 02.06.2007. 16:12 ] @
Citat:
dava: Kad sam pogledao ovaj topic, procitao problem Asmir86, vidjeo da ima par ponudjenih rjesenja. Tvoj post je bio poslednji, otvorio VB, copy - paste tvog koda, kad ono beskonacna petlja. To savrseno radi samo ako si bas tako zamislio, kako kazes. Onda sam napravio par izmjena (imas kod par primjera prije) i rjesio problem Asmir86..


O cemu ti pricas? Kakva beskonacna petlja? Tajmer koristi jedino kada moras.
Hoces reci da ovaj kod ima beskonacnu petlju i da ne radi ovo:

Citat:
Asmir86
Program bi radio recimo ovako:

povecavanje brojeva dok je cmdbuton pritisnut

A je od 0-k recimo

Text1.text = A

gdje se 'k' povecava sve dok je cmdbuton pritisnut, a kad se "pusti" povecavanje brojeva prestaje.



Evo pored istog koda ispod dajem ti i program u zip fajlu da pogledas.

Code:

Dim n As Long
Dim otpustenojedugme As Boolean

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static brojac
    'Izvrsavanje nekog koda dok je misompritisnut command1 npr:
    Do
        Label1.Caption = brojac
        If otpustenojedugme = True Then
            otpustenojedugme = False
            Exit Do
        End If
        brojac = brojac + 1
        DoEvents
   Loop
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    'Izvrsavanje nekog koda se cim se pusti taster misa sa command1
    otpustenojedugme = True
End Sub

Private Sub Form_Load()
    Label1.Caption = "0"
    Command1.Caption = "Pritisni"
End Sub

Private Sub Form_Unload(Cancel As Integer)
    End
End Sub
[ Asmir86 @ 02.06.2007. 20:07 ] @

Bas ti hvala rgdrajko! Tako sam nesto i mslio napraviti.

OK i hvala jos jednom svima na pomoci