[ 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? |
[ Asmir86 @ 30.05.2007. 19:39 ] @
[ 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 Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|