Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

DoEvents problem

[es] :: Visual Basic 6 :: DoEvents problem

[ Pregleda: 2298 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon DoEvents problem27.11.2007. u 14:20 - pre 199 meseci
Imam mdi formu frmMain. U okviru nje otvaram formu frmTest. Na formi Test imam dva dugmeta OK i CANCEL sa sledecim kodom:

Code:

Private Sub cmdOK_Click()

   stop=false
   do while Neki Uslov
        DoEvents
        if Stop=true then exit do
       'ovde nesto radi, ceka na neke podatke u petlji
   loop

End Sub

Private Sub cmdCANCEL_Click()

     stop=true
  
End Sub

U cemu je problem? Na frmTest ja pritisnem dugme OK i zavrti se petlja, ja kliknem dugme CANCEL i promenljiva stop se setuje na false. Zatim zatvorim formu Test i ostane mi frmMain na ekranu. Medjutim posle nekog vremena meni opet iskoci forma Test i nastavlja Do while petlju...i prepoznaje da je stop =false i tada staje.
Kako da sprecim da mi se forma Test ponovo podize? Kako da bezuslovno zaustavim DoEvents, tj petlju?

[Ovu poruku je menjao Aleksandar Ružičić dana 28.11.2007. u 04:51 GMT+1]
 
Odgovor na temu

Aleksandar Vasic
Web Administrator, Uspon d.o.o
Čačak

Član broj: 91692
Poruke: 1226
*.dynamic.sbb.co.yu.

Sajt: www.vasictech.net


+1 Profil

icon Re: DoEvents problem27.11.2007. u 16:06 - pre 199 meseci
Stop postoji u VB-u kao definisana komanda hehehe

Ne znam kako je uspeo da ti prodje kôd jer mu ne mozes dodeliti True ili False

a i ja mislim da bi ta promenljiva trebala da bude globalna,recite mi ako greshim :D
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: DoEvents problem28.11.2007. u 03:50 - pre 199 meseci
da, promenljiva mora da bude globalna da bi se videla u oba modula (tj forme)

da bi definisao promenljivu kao global mozes da:

1. definises public promenljivu u modulu (znaci ne u formi, u "obicnom" modulu):
Code:

Public bStop As Boolean ' The End je u pravu, ne mozes promenljivoj da das naziv stop, mozes nesto kao bStop npr


i onda bi u svako formi promenljivoj pristupao samo preko njenog imena, tj u obe forme (tacnije u svim modulima) mozes da koristis promenljivu bStop

2. definises public promenljivu u nekoj od formi:
Code:

Public bStop As Boolean


i onda promenljivoj pristupas preko te forme, tj koristis frmMain.bStop ako si deklarisao promenljivu u frmMain



p.s. koristi code tagove ubuduce kad postujes kod.
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: DoEvents problem28.11.2007. u 03:56 - pre 199 meseci
aaa tek sam sad lepo procitao post, elem pokusaj da pri izlasku iz petlje ubijes formu:
Code:

 Do While NekiUslov

    DoEvents

    If bCancel Then    
        NekiUslov = false ' ovo postavi ako mozes (tj promeni bar jednu promenljivu koja ti se nalazi u NekiUslov tako da ceo uslov bude False) za svaki slucaj
        Unload Me
    End If

 Loop


a mogao si i bCancel da ubacis u uslov:
Code:

   Do WHile NekiUslov And Not bCancel

     DoEvents

     ' do something smart here

   Loop

   If bCancel Then
      Unload Me
   Else
      ' ako ti je potreban ovaj slucaj (kad je petlja zavrsena ali nije pritisnut Cancel)
   End If

 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: DoEvents problem28.11.2007. u 07:34 - pre 199 meseci
Na brzinu sam pisao pa je mozda nesto ostalo nejasno.

1. Promenljiva jeste globalna i ne zove se Stop, to sam napisao radi lakseg razumevanja....zapravo je Stani as Boolean
2. Ja ne mogu pri izlasku iz petlje da ubijam formu. Na formi Test se nalazi 5 dugmica koji predstavlaju neke komande koje rade posao u petlji. Znaci korisnik pritisne jedno dugme, odradi posao, forma je i dalje tu da bi mogao ako zeli da pritisne drugo dugme.
3. Ne znam da li ste dobro shvatili, problem je kada kliknem Cancel i ZATVORIM formu, globalna promenljiva Stani se setuje na false, ali on sam ponovo ucita formu i nastavi petlju tamo gde je stao i kad vidi da je Stani false tada zavrsi.

Znaci kako da ubijem procese kada sa unload zatvorim formu, kako da zaustavim tu petlju?
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: DoEvents problem28.11.2007. u 08:40 - pre 199 meseci
1. jesi li 100% siguran da ti se Stani resetuje na Unload forme? (debaguj aplikaciju i dodaj Watch na tu promenljivu)
2. od kojih ti promenljivih zavisi uslov? (jesi li stavio tu Stani promenljivu u uslov?)
3. ako ti ova prva dva ne pomognu daj tu petlju da vidimo sta se desava (ovako bez koda mogu da nagadjam kolko hoces)
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: DoEvents problem28.11.2007. u 08:50 - pre 199 meseci
1. Na Unload forme radim Stani=false 100% siguran

2. Kod izgleda ovako:
Code:

                    Do While broj = 0
                        If Stani = True Then
                            lstPoruka.AddItem "Nema odgovora... " & Now
                            Exit Do
                        End If
                        DoEvents
                        If obj.DajSqlUpit(rsP, Upit) Then 'uzimam iz baze neki recordset
                        End If
                        If rsP.RecordCount <> 0 Then
                            broj = rsP.RecordCount
                            Screen.MousePointer = vbNormal
                            lstPoruka.AddItem "Odgovoreno na zahtev... " & Now
                         Else
                            Call Pauza(30) 'cekam 30 sekundi
                        End If
                        
                    Loop


Znaci kada posaljem neki zahtev, treba u bazu nesto da se upise ali ne odmah, tako da u petlji cekam na taj odgovor. Dokle god je broj=0 znaci da nema odgovora i ja ga vrtim u petlji.
Kada uradim unload forme tamo se setuje Stani=false, ali posle 30 sekundi forma se sama podigne i u debageru krene od linije Do While.....i tada vidi da je Stani = false i zavrsi sa petljom.

Znaci ako je korisnik uradio unload forme njega taj proces, tj. odgovor vise ne zanima, kako da ubijem to sto se u petlji vrti i dalje? Kako da sprecim formu da se sama podigne i nastavi sa Do while...?

[Ovu poruku je menjao Aleksandar Ružičić dana 28.11.2007. u 16:54 GMT+1]
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: DoEvents problem28.11.2007. u 16:00 - pre 199 meseci
daj kod za Pauza proceduru, verovatno tu imash neku petlju koja se ne prekida
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: DoEvents problem29.11.2007. u 07:14 - pre 199 meseci
Code:

Public Sub Pauza(ByVal BrojSekundi As Single)
    
    Dim d As Integer
    Dim t As Single
    t = Timer
    
    Do While Timer - t < BrojSekundi
        d = DoEvents()
        If Timer < t Then
            t = t - CLng(24) * CLng(60) * CLng(60) * CLng(1000)
        End If
    Loop

End Sub


[Ovu poruku je menjao Aleksandar Ružičić dana 29.11.2007. u 13:53 GMT+1]
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: DoEvents problem29.11.2007. u 12:52 - pre 199 meseci
i Pauza procedura i ona petlja su ti nepotrebni, koristi Timer, i kad zatvaras formu samo stavi Timer1.Enabled = False
to ti je najelegantnije resenje


p.s. koristi code tagove kad postujes kod
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: DoEvents problem29.11.2007. u 14:26 - pre 199 meseci
Eh, Timer me nervira samo tako jer ne mogu da stavim veci interval od 65,535 milisekundi, tj 1 minuta. Zato sam napravio funkciju Pauza. Probacu nesto da izmenim.
Hvala na trudu
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: DoEvents problem29.11.2007. u 16:46 - pre 199 meseci
Pazi, to sto je Timer (tj njegov interval) ogranicen na 65 535 milisekundi ne znaci da ne mozes pomocu njega da izvrsavas nesto na recimo 5 minuta.

evo npr kako pomocu Timera da prikazes MsgBox svakih 5 minuta:
Code:

Private lElapsed As Long
Private lInterval As Long ' u sekundama

Private Sub Form_Load()

   lInterval = 5 * 60       ' 5 minuta

   StartTimer

End SUb

Private Sub StartTimer
   lElapsed = 0
   Timer1.Interval = 1000
   Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
   lElapsed = lElapsed + 1 
   If lElapsed >= lInterval * 1000 Then
      lELapsed = 0
      
      ' ovde izvrsavas kod:

      MsgBox "Bla"

   End If
End Sub


i tamo gde zatvaras formu (a ne unistavas je) postavi Timer1.Enabled = False
 
Odgovor na temu

oggie

Član broj: 126613
Poruke: 140
212.62.49.*



+1 Profil

icon Re: DoEvents problem30.11.2007. u 07:42 - pre 199 meseci
Ma znam ja da mogu da koristim timer i za vise minuta, ali mi je krajnje glupo da je njegov interval tako ogranicen i onda moras izokola da brojis minute. Kad je vec napravljena kontrola ne razumem zasto je interval ogranicen...ali dobro...
Hvala za kod, moracu ceo kod da pretresem i da vidim da uradim na drugi nacin. Trenutno sam u guzvi oko nekog drugog posla pa ne stizem.
 
Odgovor na temu

[es] :: Visual Basic 6 :: DoEvents problem

[ Pregleda: 2298 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.