Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Problem z progress bar'em (paskiem postępu)
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002
Problem z progress bar'em (paskiem postępu)

Cześć wszystkim!

Słuchajcie-mam problem, który pewnie przez większość z Was zostanie uznany za problemy początkującego, tak więc spiszę od razu z wyjaśnieniem, że wcześniej po prostu wiedza na ten temat nie była mi potrzebna bo nie stsowałem wspomnianej kontrolki w programach.

Sytuacja ma się tak:
Piszę program operujący na ciągach tekstowych (ma prowadzić statystyki zadanageo tekstu).
Mam na formie nr2 pola, gdzie użytkownik ma wpisać te ciągi i mam tam przycisk "Podsumowanie". Wszystko jest ok do momentu gdy tekst jest krótki, przy dłuższym (np. 20255 znaków) program "myśli" nawet 8 sekund i dopiero wyświetla nowe okno (Form3) z podsumowaniem. Ponieważ wygląda to jakby program "wisiał" myślę, że należałoby dodać pasek postępu, czyli kontrolkę progress bar-ok, tylko jak jej użyć!?

Mój program po kliknięciu wspomnianego przycisku ładuje Form3, która ma w Form_Load takie "cóś" (pętle):

Label4.Caption = "Ogółem znaków: " & Len(Form2.Text1.Text)
Dim cyfra2
cyfra2 = 0
cyfra = Form2.Text1.Text
For c = 1 To Len(cyfra)
If Mid$(cyfra, c, 1) = "0" Or Mid$(cyfra, c, 1) = "1" Or Mid$(cyfra, c, 1) = "2" Or Mid$(cyfra, c, 1) = "3" Or Mid$(cyfra, c, 1) = "4" Or Mid$(cyfra, c, 1) = "5" Or Mid$(cyfra, c, 1) = "6" Or Mid$(cyfra, c, 1) = "7" Or Mid$(cyfra, c, 1) = "8" Or Mid$(cyfra, c, 1) = "9" Then
cyfra2 = cyfra2 + 1
Form3.Label6.Caption = "W tym cyfr: " & cyfra2
Else
If cyfra2 = "" Then cyfra2 = "0"
Form3.Label6.Caption = "W tym cyfr: " & cyfra2
End If
Next c
Form3.Label5.Caption = "W tym liter: " & Len(Form2.Text1.Text) - cyfra2
'
Dim spacja
spacja = 0
x = Form2.Text1.Text
For a = 1 To Len(x)
If Mid$(x, a, 1) = " " Then
spacja = spacja + 1
Form3.Label8.Caption = "Liczba odstępów (spacji): " & spacja
Else
If spacja = "" Then spacja = "0"
Form3.Label8.Caption = "Liczba odstępów (spacji): " & spacja
End If
Next a
'
Dim polski2
polski2 = 0
polski = Form2.Text1.Text
For p = 1 To Len(polski)
If Mid$(polski, p, 1) = "ą" Or Mid$(polski, p, 1) = "ś" Or Mid$(polski, p, 1) = "ł" Or Mid$(polski, p, 1) = "ż" Or Mid$(polski, p, 1) = "ź" Or Mid$(polski, p, 1) = "ć" Or Mid$(polski, p, 1) = "ń" Or Mid$(polski, p, 1) = "ę" Or Mid$(polski, p, 1) = "ó" Then
polski2 = polski2 + 1
Form3.Label7.Caption = "Liczba znaków polskich: " & polski2
Else
If polski2 = "" Then polski2 = "0"
Form3.Label7.Caption = "Liczba znaków polskich: " & polski2
End If
Next p
'
Dim interp2
interp2 = 0
interp = Form2.Text1.Text
For i = 1 To Len(interp)
If Mid$(interp, i, 1) = "," Or Mid$(interp, i, 1) = "." Or Mid$(interp, i, 1) = "?" Or Mid$(interp, i, 1) = ":" Or Mid$(interp, i, 1) = ";" Or Mid$(interp, i, 1) = "-" Or Mid$(interp, i, 1) = "'" Or Mid$(interp, i, 1) = "(" Or Mid$(interp, i, 1) = "" Or Mid$(interp, i, 1) = "!" Or Mid$(interp, i, 1) = "/" Or Mid$(interp, i, 1) = "" Or Mid$(interp, i, 1) = "{" Or Mid$(interp, i, 1) = "}" Or Mid$(interp, i, 1) = "[" Or Mid$(interp, i, 1) = "]" Then
interp2 = interp2 + 1
Form3.Label9.Caption = "Liczba znaków interpunkcyjnych: " & interp2
Else
If interp2 = "" Then interp2 = "0"
Form3.Label9.Caption = "Liczba znaków interpunkcyjnych: " & interp2
End If
Next i

Jakby tego było mało-w opcjach można sobie ustawić maksymalnie 6 ciągów do porównania, a wtedy, jeśli w każdym będzie po 20255 znaków, to program będzie "myślał" nawet ponad pół minuty!


Bardzo proszę o pomoc, bo KOMPLETNIE nie wiem jak się do tego zabrać-pasek chciałbym mieć na Form2 (tym gdzie przycisk wywołujący "Podsumowanie".

        Z góry dzięki za pomoc

[Post edytowany dnia 16-04-2003 21:57 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


16-04-2003 21:52
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003
Hmm...

Może to Ci nie wiele pomoże, ale można to zrobić na 2 progressbarach: progressbar1 może wyświetlać poprostu ilość sekcji, a progressbar2 może wyświetlać ile do końca zostało w danej sekcji:

with progressbar1
.max=4
progressbar2.max=len(form2.text1.text)

Label4.Caption = "Ogółem znaków: " & Len(Form2.Text1.Text)
Dim cyfra2
cyfra2 = 0
cyfra = Form2.Text1.Text
progressbar2.value=0
For c = 1 To Len(cyfra)
progressbar2.value=c
If Mid$(cyfra, c, 1) = "0" Or Mid$(cyfra, c, 1) = "1" Or Mid$(cyfra, c, 1) = "2" Or Mid$(cyfra, c, 1) = "3" Or Mid$(cyfra, c, 1) = "4" Or Mid$(cyfra, c, 1) = "5" Or Mid$(cyfra, c, 1) = "6" Or Mid$(cyfra, c, 1) = "7" Or Mid$(cyfra, c, 1) = "8" Or Mid$(cyfra, c, 1) = "9" Then
cyfra2 = cyfra2 + 1
Form3.Label6.Caption = "W tym cyfr: " & cyfra2
Else
If cyfra2 = "" Then cyfra2 = "0"
Form3.Label6.Caption = "W tym cyfr: " & cyfra2
End If
Next c
.value=.value+1
Form3.Label5.Caption = "W tym liter: " & Len(Form2.Text1.Text) - cyfra2
'
Dim spacja
spacja = 0
x = Form2.Text1.Text
progressbar2.value=0
For a = 1 To Len(x)
progressbar2.value=a
If Mid$(x, a, 1) = " " Then
spacja = spacja + 1
Form3.Label8.Caption = "Liczba odstępów (spacji): " & spacja
Else
If spacja = "" Then spacja = "0"
Form3.Label8.Caption = "Liczba odstępów (spacji): " & spacja
End If
Next a
.value=.value+1
'
Dim polski2
polski2 = 0
polski = Form2.Text1.Text
progressbar2.value=0
For p = 1 To Len(polski)
progressbar2.value=p
If Mid$(polski, p, 1) = "ą" Or Mid$(polski, p, 1) = "ś" Or Mid$(polski, p, 1) = "ł" Or Mid$(polski, p, 1) = "ż" Or Mid$(polski, p, 1) = "ź" Or Mid$(polski, p, 1) = "ć" Or Mid$(polski, p, 1) = "ń" Or Mid$(polski, p, 1) = "ę" Or Mid$(polski, p, 1) = "ó" Then
polski2 = polski2 + 1
Form3.Label7.Caption = "Liczba znaków polskich: " & polski2
Else
If polski2 = "" Then polski2 = "0"
Form3.Label7.Caption = "Liczba znaków polskich: " & polski2
End If
Next p
.value=.value+1
'
Dim interp2
interp2 = 0
interp = Form2.Text1.Text
progressbar2.value=0
For i = 1 To Len(interp)
progressbar2.value=i
If Mid$(interp, i, 1) = "," Or Mid$(interp, i, 1) = "." Or Mid$(interp, i, 1) = "?" Or Mid$(interp, i, 1) = ":" Or Mid$(interp, i, 1) = ";" Or Mid$(interp, i, 1) = "-" Or Mid$(interp, i, 1) = "'" Or Mid$(interp, i, 1) = "(" Or Mid$(interp, i, 1) = "" Or Mid$(interp, i, 1) = "!" Or Mid$(interp, i, 1) = "/" Or Mid$(interp, i, 1) = "" Or Mid$(interp, i, 1) = "{" Or Mid$(interp, i, 1) = "}" Or Mid$(interp, i, 1) = "[" Or Mid$(interp, i, 1) = "]" Then
interp2 = interp2 + 1
Form3.Label9.Caption = "Liczba znaków interpunkcyjnych: " & interp2
Else
If interp2 = "" Then interp2 = "0"
Form3.Label9.Caption = "Liczba znaków interpunkcyjnych: " & interp2
End If
Next i
.value=.value+1

na czerwono dałem to, co ja napisałem w module


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

17-04-2003 15:39
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Dzięki-niby działa, ale:
-jak TEN SAM TEKST dam w programie bez paska, to go analizuje 5 sekund, a jak dam te paski, to aż 35! Nie wiesz czemu?
-Wogóle na początku vb mi dał przy uruchomieniu error, bo nie zakończyłeś "with" :-)
-jak dam pierwszy raz przycisk podsumowanie to jest ok, ale jak dam drugi, to już jest KAPUT-"Error 380 Invalid property value" i podświetla mi linijkę ".Value = .Value + 1"
-wogóle to z innych powodów musiałem trochę swój kod programu zmienić. Teraz jest taki (ten fragment):

If Form2.Text1.Enabled = True Then
With Form2.ProgressBar1
.Max = 4
Form2.ProgressBar2.Max = Len(Form2.Text1.Text)
Dim spacja
spacja = 0
X = Form2.Text1.Text
Form2.ProgressBar2.Value = 0
For a = 1 To Len(X)
Form2.ProgressBar2.Value = a
If Mid$(X, a, 1) = " " Then
spacja = spacja + 1
Form3.Label8.Caption = "Liczba odstępów (spacji): " & spacja
End If
Next a
.Value = .Value + 1
If spacja = "" Then spacja = "0"
Form3.Label8.Caption = "Liczba odstępów (spacji): " & spacja
'
Label4.Caption = "Ogółem znaków: " & Len(Form2.Text1.Text)
Dim cyfra2
cyfra2 = 0
cyfra = Form2.Text1.Text
Form2.ProgressBar2.Value = 0
For c = 1 To Len(cyfra)
Form2.ProgressBar2.Value = c
If Mid$(cyfra, c, 1) = "0" Or Mid$(cyfra, c, 1) = "1" Or Mid$(cyfra, c, 1) = "2" Or Mid$(cyfra, c, 1) = "3" Or Mid$(cyfra, c, 1) = "4" Or Mid$(cyfra, c, 1) = "5" Or Mid$(cyfra, c, 1) = "6" Or Mid$(cyfra, c, 1) = "7" Or Mid$(cyfra, c, 1) = "8" Or Mid$(cyfra, c, 1) = "9" Then
cyfra2 = cyfra2 + 1
Form3.Label6.Caption = "W tym cyfr: " & cyfra2
End If
Next c
.Value = .Value + 1
If cyfra2 = "" Then cyfra2 = "0"
Form3.Label6.Caption = "W tym cyfr: " & cyfra2
Form3.Label5.Caption = "W tym liter: " & Len(Form2.Text1.Text) - cyfra2 - spacja
'
Dim polski2
polski2 = 0
polski = Form2.Text1.Text
Form2.ProgressBar2.Value = 0
For p = 1 To Len(polski)
Form2.ProgressBar2.Value = p
If Mid$(polski, p, 1) = "ą" Or Mid$(polski, p, 1) = "ś" Or Mid$(polski, p, 1) = "ł" Or Mid$(polski, p, 1) = "ż" Or Mid$(polski, p, 1) = "ź" Or Mid$(polski, p, 1) = "ć" Or Mid$(polski, p, 1) = "ń" Or Mid$(polski, p, 1) = "ę" Or Mid$(polski, p, 1) = "ó" Then
polski2 = polski2 + 1
Form3.Label7.Caption = "Liczba znaków polskich: " & polski2
End If
Next p
.Value = .Value + 1
If polski2 = "" Then polski2 = "0"
Form3.Label7.Caption = "Liczba znaków polskich: " & polski2
'
Dim interp2
interp2 = 0
interp = Form2.Text1.Text
Form2.ProgressBar2.Value = 0
For i = 1 To Len(interp)
Form2.ProgressBar2.Value = i
If Mid$(interp, i, 1) = "," Or Mid$(interp, i, 1) = "." Or Mid$(interp, i, 1) = "?" Or Mid$(interp, i, 1) = ":" Or Mid$(interp, i, 1) = ";" Or Mid$(interp, i, 1) = "-" Or Mid$(interp, i, 1) = "'" Or Mid$(interp, i, 1) = "(" Or Mid$(interp, i, 1) = "" Or Mid$(interp, i, 1) = "!" Or Mid$(interp, i, 1) = "/" Or Mid$(interp, i, 1) = "\" Or Mid$(interp, i, 1) = "{" Or Mid$(interp, i, 1) = "}" Or Mid$(interp, i, 1) = "[" Or Mid$(interp, i, 1) = "]" Then
interp2 = interp2 + 1
Form3.Label9.Caption = "Liczba znaków interpunkcyjnych: " & interp2
End If
Next i
.Value = .Value + 1
If interp2 = "" Then interp2 = "0"
Form3.Label9.Caption = "Liczba znaków interpunkcyjnych: " & interp2
End With
End If

Jak widać na końcu jest dodane przeze mnie end with, bo jak go nie było, to VB się czepiał niżeszego end if "End if without block if", a jak nie dałm end if to sie czepił, że nie ma end with.

Masz jakiś pomysł?


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-04-2003 12:12
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Czasem się wqrzam, dlaczego podświetla mi end if, a jak go skasuje to mi wypisuje, że go nie ma . O tym, że nie dałem End Witha, to się skapłem dopiero po zapostowaniu. Nie wim, dlaczego "myśli" 35 sek. jak są paski, ale one chyba trochę zamulają, choć nigdy nie miałem problemów z zamulającymi komp paskami (nigdy mi nie zamulały). Linijka "Form2.ProgressBar2.Value = 0" jest tu zbędna, bo pętla "For" zeruje zmienną, do której jest przypięty Progress2. Zamiast form2.progressbar2.value = 0 daj .value = 0. Jeszcze na temat dłuższego "myślenia" kompa: spróbuj skasować pasek, który liczy sekcje i zobacz, czy dalej będzie tyle to trwało, jeżeli tak to nie sądzę żeby to była wina pasków.


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

19-04-2003 12:43
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

ok, ok, ale o o co mu chodzi z tym Invalid property value i jak to naprawić????


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


19-04-2003 19:37
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Invalid Property Value występuje wtedy, gdy Value jest większy od Max. Żeby to naprawić wpisz następujące linijki:
On Error Resume Next
form2.progressbar1.value=0

Teraz powinien to strawić

[Post edytowany dnia 19-04-2003 22:45 przez mikmas]


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

19-04-2003 22:44
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Tylko nie zapomnij wpisać to na początku kodu!


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

19-04-2003 22:51
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

Dzięki za wszystko-to jednak była wina pasków, jak usunąłem jeden, to nic nie dało. Dopiero jak usunąłem obydwa i ich kod, to wszytsko przyspieszyło. Mam tylko jedno pytanko-co to znaczy dla VB ja mu napiszę tam np. ".Value=0"?

Już sobie inczej poradziłem-program nazywa się Letters Calculator 2.0 XP style BETA-zapraszam na moją stronę na razie do działu "moje programy" - http://www.michmaj.free.komrel.net


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


20-04-2003 17:58
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

".value=0" - to zapobiegnie wystąpieniu błędu "Invalid Property Value", ponieważ tan "postęp" zostanie wyzerowany. Aby zobaczyć dokładniej trzeba by napisać bardzo prosty programik:

Sub Form_Load()
ProgressBar1.Value = ProgressBar1.Max 'Ustawianie postępu na maxa
End Sub
Sub Command1_Click()
ProgressBar1.Value = 0 'Zerowanie postępu
End Sub

Nanieś na Forma przycisk i pasek; skopiuj i uruchom.


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

21-04-2003 13:56
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Wszystkich odpowiedzi: 8 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1