[ Aleksandrov @ 05.04.2005. 15:33 ] @
| imam jednu dugacku petlju koja pretrazuje bazu podataka, i pozeleo sam da stavim progressBar koji sam stavio u frame.
program izgleda ovako:
frame1.visible 'na frejmu se nalazi progressbar
{ ...
petlja....
progressbar.value = progressbar.value+1
}
problem je u tome sto kada se ovaj program startuje prvo se sve u petlji obavi (a to traje nekih 40 sec.) pa se tek onda prikaze frame1.
Min i max vrednosti kao i ostali parametri su dobro postavljeni.
Kako da uradim da mi se frame1 prikaze pre ulaska u petlju, tj. kako da uradim taj Force display.
Nadam se da sam dobro objasnio problem. |
[ mladenovicz @ 05.04.2005. 15:38 ] @
Code:
frame1.visible 'na frejmu se nalazi progressbar
zameni sa
Code:
frame1.visible = True
Code:
{ ...
petlja....
progressbar.value = progressbar.value+1
}
zameni sa
Code:
{ ...
petlja....
progressbar.value = progressbar.value+1
DoEvents
}
[ Aleksandrov @ 05.04.2005. 18:28 ] @
Problem jos uvek nije resen.
Probao sam ovako:
Frame3.Visible = True
' .....
PgBar1.Min = 1
PgBar1.Max = BrojIspisanih
For i = 1 To BrojIspisanih
PgBar1.Value = i
DoEvents
If LblObjekat(i).Caption <> List3.List(List3.ListIndex) Then
LblPrezime(i).Visible = False
LblObjekat(i).Visible = False
LblDatumPrijave(i).Visible = False
......
I dalje se ne pojavljuje frame3
[ Mladen_Perisic @ 05.04.2005. 18:54 ] @
Timer kontrola i nakon 1 sekunde da pokrene tu petlju, a kad se petlja završi, da ukasi tajmer kontrolu. Valjda je jedna sekunda dovoljna za učitavanje i prikazivanje forme na ekranu. Na taj način ja rijašavam slične probleme.
[ Aleksandrov @ 05.04.2005. 19:05 ] @
Mislim da cu i tada imati problem.
Ako stavim frame u tajmer pa kad se to usnimi nastavim sa petljom, onda ce se frame videti ali progressBar nece menjati vrednost tj. mislim da se promena nece videti dok se petlja ne zavrsi.
Ako stavim tajmer u petlju to ce biti jako jako sporo
Sta da radim...
[ Mladen_Perisic @ 05.04.2005. 19:15 ] @
Ne, ne ne............ Nijesi me razumio stavi:
Private SubTimer1_xXXyyy()
Timer1.enabled=True
(
For....
Progerbar.........
)
Timer1. enabled= False
End Sub
Pokušaj ovako....kući imam neki sličan kod.................. Vidjeću da ga nekako postujem.
[ Aleksandrov @ 05.04.2005. 22:19 ] @
ali pazi u petlji se vrti baza podataka koja ima dosta unosa tako da ne mogu da odredim koje vreme da stavim u tajmer. Vreme zavisi i od broja unosa kao i od masine na kojoj se program vrti.
Npr. na Athlon 2500+ 512MB da bi se petlja izvrsila potrebno je trenutno nesto vise od 15 sec. dok se kod intel P1 na 233 mhz 64MB petlja izvrsava oko 2-3 minute
Razumes?
Sigurno ima neka funkcija u VBu koja ceka da se obave svi raniji zahtevi ( sto sam ocekivao da ce DoEvents odraditi)
Please pomozite....
[ Marko_L @ 05.04.2005. 22:28 ] @
Nisi razumeo Mladena, on je mislio da staviš Timer kao pauzu, znači da program sačeka sekundu, a onda disejbluješ Timer i pokreneš petlju, a ne da petlja radi u Timer-u.
Elem, DoEvents bi trebalo da odradi posao, ne znam zašto se kod tebe dešava to što se dešava.Da li si siguran da si potrefio imena kontrola, jer u prvom postu pominješ Frame1, a u ovom drugom Frame3 ?
Bilo kako bilo, možeš li da postuješ kompletan taj deo koda sa sve petljom i objašnjenjem šta ti se od kontrola nalazi na formi.Možda i da okačiš tu spornu formu, ako nije neka državna ili poslovna tajna na njoj :)
[ Aleksandrov @ 05.04.2005. 22:44 ] @
Mogu probati ali mislim da ako to uradim nece se updateovati progressbar tj ima vrednost ProgressBara ima da se promeni tek na kraju petlje. Sta mislis?
Saljem ti dati deo koda...
imena kontrola nisu problem. Prvi put sam pitao uopsteno, a drugi put sam kopirao kod.
Code:
Private Sub List3_Click()
Dim RedBr As Integer
Dim JeliNadjeno As Boolean
Dim KojijeNadjen As Integer
Frame3.Visible = True '(((((
BrojNalogaPoObjektu = 0
BiranjePoObjektu = True
CObjekat_Click
VScroll1.Visible = False
RedBr = 1340
CPrezime.Enabled = False
CObjekat.Enabled = False
CDPrijave.Enabled = False
CDIzdavanja.Enabled = False
CDZavrsetka.Enabled = False
CDAlarma.Enabled = False
CDIzvodjac.Enabled = False
JeliNadjeno = False
PgBar1.Min = 1 '&&&&&&
PgBar1.Max = BrojIspisanih '&&&&&&
For i = 1 To BrojIspisanih
PgBar1.Value = i '@@@@@@
DoEvents '@@@@@@
If LblObjekat(i).Caption <> List3.List(List3.ListIndex) Then
LblPrezime(i).Visible = False
LblObjekat(i).Visible = False
LblDatumPrijave(i).Visible = False
LblDatumIzdavanja(i).Visible = False
LblDatumZavrsetka(i).Visible = False
LblDatumAlarma(i).Visible = False
LblRadovi(i).Visible = False
u = u + 1
End If
If LblObjekat(i).Caption = List3.List(List3.ListIndex) Then
If JeliNadjeno = False Then
JeliNadjeno = True
KojijeNadjen = i
End If
LblPrezime(i).Visible = True
LblObjekat(i).Visible = True
LblDatumPrijave(i).Visible = True
LblDatumIzdavanja(i).Visible = True
LblDatumZavrsetka(i).Visible = True
LblDatumAlarma(i).Visible = True
LblRadovi(i).Visible = True
u = u + 1
BrojNalogaPoObjektu = BrojNalogaPoObjektu + 1
End If
If LblObjekat(i).Caption = List3.List(List3.ListIndex) Then
RedBr = RedBr + 300
LblPrezime(i).Top = RedBr
LblObjekat(i).Top = RedBr
LblDatumPrijave(i).Top = RedBr
LblDatumIzdavanja(i).Top = RedBr
LblDatumZavrsetka(i).Top = RedBr
LblDatumAlarma(i).Top = RedBr
LblRadovi(i).Top = RedBr
End If
Next i
If BrojNalogaPoObjektu > MaxBrojIspisanih Then
VScroll1.Visible = True
VScroll1.Max = KojijeNadjen - 1 + BrojNalogaPoObjektu - MaxBrojIspisanih
VScroll1.Min = KojijeNadjen - 1
VScroll1.Value = VScroll1.Min
For d = KojijeNadjen + MaxBrojIspisanih To KojijeNadjen + BrojNalogaPoObjektu
LblPrezime(d).Visible = False
LblObjekat(d).Visible = False
LblDatumPrijave(d).Visible = False
LblDatumIzdavanja(d).Visible = False
LblDatumZavrsetka(d).Visible = False
LblDatumAlarma(d).Visible = False
LblRadovi(d).Visible = False
Next d
End If
List3.Clear
End Sub
[ Marko_L @ 05.04.2005. 23:15 ] @
Hmmm...zanimljivo.Ajde probaj da staviš pretragu u podprogram, pa vidi šta se dešava.Trebalo bi da radi.Znači, nešto ovako
Code: Private Sub List3_Click()
Frame3.Visible = True '(((((
DoEvents
pretraga
End Sub
Private Sub pretraga()
Dim RedBr As Integer
Dim JeliNadjeno As Boolean
Dim KojijeNadjen As Integer
BrojNalogaPoObjektu = 0
BiranjePoObjektu = True
CObjekat_Click
VScroll1.Visible = False
RedBr = 1340
CPrezime.Enabled = False
CObjekat.Enabled = False
CDPrijave.Enabled = False
CDIzdavanja.Enabled = False
CDZavrsetka.Enabled = False
CDAlarma.Enabled = False
CDIzvodjac.Enabled = False
JeliNadjeno = False
PgBar1.Min = 1 '&&&&&&
PgBar1.Max = BrojIspisanih '&&&&&&
For i = 1 To BrojIspisanih
PgBar1.Value = i '@@@@@@
DoEvents '@@@@@@
If LblObjekat(i).Caption <> List3.List(List3.ListIndex) Then
LblPrezime(i).Visible = False
LblObjekat(i).Visible = False
LblDatumPrijave(i).Visible = False
LblDatumIzdavanja(i).Visible = False
LblDatumZavrsetka(i).Visible = False
LblDatumAlarma(i).Visible = False
LblRadovi(i).Visible = False
u = u + 1
End If
If LblObjekat(i).Caption = List3.List(List3.ListIndex) Then
If JeliNadjeno = False Then
JeliNadjeno = True
KojijeNadjen = i
End If
LblPrezime(i).Visible = True
LblObjekat(i).Visible = True
LblDatumPrijave(i).Visible = True
LblDatumIzdavanja(i).Visible = True
LblDatumZavrsetka(i).Visible = True
LblDatumAlarma(i).Visible = True
LblRadovi(i).Visible = True
u = u + 1
BrojNalogaPoObjektu = BrojNalogaPoObjektu + 1
End If
If LblObjekat(i).Caption = List3.List(List3.ListIndex) Then
RedBr = RedBr + 300
LblPrezime(i).Top = RedBr
LblObjekat(i).Top = RedBr
LblDatumPrijave(i).Top = RedBr
LblDatumIzdavanja(i).Top = RedBr
LblDatumZavrsetka(i).Top = RedBr
LblDatumAlarma(i).Top = RedBr
LblRadovi(i).Top = RedBr
End If
Next i
If BrojNalogaPoObjektu > MaxBrojIspisanih Then
VScroll1.Visible = True
VScroll1.Max = KojijeNadjen - 1 + BrojNalogaPoObjektu - MaxBrojIspisanih
VScroll1.Min = KojijeNadjen - 1
VScroll1.Value = VScroll1.Min
For d = KojijeNadjen + MaxBrojIspisanih To KojijeNadjen + BrojNalogaPoObjektu
LblPrezime(d).Visible = False
LblObjekat(d).Visible = False
LblDatumPrijave(d).Visible = False
LblDatumIzdavanja(d).Visible = False
LblDatumZavrsetka(d).Visible = False
LblDatumAlarma(d).Visible = False
LblRadovi(d).Visible = False
Next d
End If
List3.Clear
End Sub
[ Aleksandrov @ 05.04.2005. 23:45 ] @
Probao sam.
To prikazuje frame3 ali se progressbar ne pomera. tek kad se petlja zavrsi onda se i progressbar promeni na max vrednost
[ Aleksandrov @ 05.04.2005. 23:46 ] @
ProgressBar ima ime PgBar1 u kodu
[ Marko_L @ 05.04.2005. 23:53 ] @
A jesi li probao da umesto
Code: PgBar1.Value = i
staviš
Code: PgBar1.Value = PgBar1.Value + 1
[ Aleksandrov @ 06.04.2005. 00:07 ] @
... Mislim da je to isto.... Ali ... ovo su samo pokusaji iz ocaja...
..... ne...... ne radi ni to....
[ Marko_L @ 06.04.2005. 00:11 ] @
Hmmm...a probaj da progresbar staviš izvan Frame3, mada ne verujem da je do toga, ali čisto još jedan očajnički pokušaj, pošto nemam vremena sad detaljnije da gledam kod, nešto ga zeza u toj petlji.
[ Marko_L @ 06.04.2005. 14:59 ] @
Sad mi pade nešto na pamet.A da probaš ovako
Code: Private Sub List3_Click()
Frame3.Visible = True
PgBar1.Min = 1
PgBar1.Max = BrojIspisanih
DoEvents
pretraga
End Sub
pa onda onaj ostatak koda u podprogramu.
[ Aleksandrov @ 07.04.2005. 01:42 ] @
Ne to nije to.
Odustajem.
U svakom slucaju hvala ti na pokusajima.
VB je takav. Jednom nesto hoce, drugi put nece.... Znaci da sebi pocupas kosu.
Ako slucajno jednom uspem to da sredim, objavicu ovde.
[ LudoA @ 12.07.2006. 00:28 ] @
Znam da je post star preko godinu dana... :P ali nedavno sam imao isti problem i rijesio ga sasvim slucajno, pa ako kome zatreba... Sve sto je potrebno uraditi je staviti
Code: SendKeys {"Home"}
frmUcitavanje.Show vbModal, Me
....ostatak koda
ili ako ne radi onda samo zamijeniti
Code: frmUcitavanje.Show vbModal, Me
SendKeys {"Home"}
....ostatak koda
Umjesto "Home" moze biti bilo koji drugi key koji simulira pritisnutu tipku.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|