Help @Progressbar

Trancefreak

Mitglied
Hallo Leute habe heute ein kleines Programm geschrieben was eine status bar und eine progress bar hat jedoch brauche ich hilfe
und zwar wenn die progress bar leiste voll ist und den wert 10000000 erreicht*die progressbar* soll eine meldung kommen das der upload fertig ist dies habe ich wie folgt versucht

If ProgressBar1.Value = 10 Then
MsgBox "Upload komplett", , "Test"
End If

Die meldung kommt jedoch nicht oder habe ich es nur falsch eingefügt?
Dies ist der gesammte Quellcode vielleicht könnt ihr mir ja sagen wo man das einsetzt oder falls ich falsch liege welches der richtige code dafür ist!
Danke im vorraus!


Option Explicit

Private defProgBarHwnd As Long

Private Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long

'used to change progressbar colour
Private Const WM_USER = &H400
Private Const CCM_FIRST As Long = &H2000&
Private Const CCM_SETBKCOLOR As Long = (CCM_FIRST + 1)

'set progressbar backcolor in IE3 or later
Private Const PBM_SETBKCOLOR As Long = CCM_SETBKCOLOR

'set progressbar barcolor in IE4 or later
Private Const PBM_SETBARCOLOR As Long = (WM_USER + 9)

Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long



Private Sub Form_Load()

Dim pnl As Panel
Dim btn As Button
Dim x As Long

'create statusbar
With StatusBar1
For x = 1 To 3
Set pnl = .Panels.Add(, , "", sbrText)
pnl.Alignment = sbrLeft
pnl.Width = 1800
pnl.Bevel = sbrInset
If x = 3 Then pnl.AutoSize = sbrSpring
If x = 1 Then pnl.Text = "Status"
Next
End With


Command2.Caption = "Start Trace "

With ProgressBar1
.Min = 0
.Max = 10000000
.Value = .Max
End With

End Sub


Private Sub Form_Unload(Cancel As Integer)

If defProgBarHwnd <> 0 Then
SetParent ProgressBar1.hwnd, defProgBarHwnd
End If

End Sub




Private Sub Command2_Click()

Dim cnt As Long
Dim tmp As String

tmp = StatusBar1.Panels(1).Text
StatusBar1.Panels(1).Text = "Progress ..."

For cnt = 1 To ProgressBar1.Max

ProgressBar1.Value = cnt

'needed to trap cancel click
DoEvents

Next

StatusBar1.Panels(1).Text = tmp
ProgressBar1.Value = 0

End Sub


Private Function AttachProgBar(pb As ProgressBar, _
sb As StatusBar, _
nPanel As Long, _
pading As Long)

If defProgBarHwnd = 0 Then

'change the parent
defProgBarHwnd = SetParent(pb.hwnd, sb.hwnd)

With sb

'adjust statusbar. Doing it this way
'relieves the necessity of calculating
'the statusbar position relative to the
'top of the form. It happens so fast
'the change is not seen.
.Align = vbAlignTop
.Visible = False

'change, move, set size and re-show
'the progress bar in the new parent
With pb
.Visible = False
.Align = vbAlignNone
.Appearance = ccFlat
.BorderStyle = ccNone
.Width = sb.Panels(nPanel).Width
.Move (sb.Panels(nPanel).Left + pading), _
(sb.Top + pading), _
(sb.Panels(nPanel).Width - (pading * 2)), _
(sb.Height - (pading))

.Visible = True
.ZOrder 0
End With

'restore the statusbar to the
'bottom of the form and show
.Panels(nPanel).AutoSize = sbrNoAutoSize
.Align = vbAlignBottom
.Visible = True

End With

End If

End Function
 
Zuletzt bearbeitet:
tach

ich seh nicht ganz wo du diese Bedingung in den Code eingebaut hast. Wenn du sie eingebaut hast, überprüf mal ob die Bedingung auch abgearbeitet wird, während die Progressbar steigt.

Poste doch nur den wesentlichen Teilcode nicht alles, übersichtshalber?

gruäss

edit:

Frage auch, ob du auch in 1 Schritte raufzählst, falls nicht, könnte es sein dass 10 übersprungen wird?
 
Zuletzt bearbeitet:
öhm
also du als max wert 10000 ? Das heisst bei 10000 ist der Upload fertig !?
Und du hast in der If-Abfrage als Value 10 !? Mhh
 
Moin
Srry war ein schreibfehler soll natürlich so aussehen!

If ProgressBar1.Value = 10000000 Then
MsgBox "Upload komplett", , "Test"
End If


Also eingebaut hatte ich es auf command 2 den wenn ich den button dann tätige läuft die progressbar ja hoch und dann habe ich die if anwendung versucht was jedoch nicht reagiert

Private Sub Command2_Click()

Dim cnt As Long
Dim tmp As String

tmp = StatusBar1.Panels(1).Text
StatusBar1.Panels(1).Text = "Progress ..."

For cnt = 1 To ProgressBar1.Max

ProgressBar1.Value = cnt

'needed to trap cancel click
DoEvents

Next

StatusBar1.Panels(1).Text = tmp
ProgressBar1.Value = 0

If ProgressBar1.Value = 10000000 Then
MsgBox "Upload komplett", , "Test"
End If

End Sub

Gruss Patrick
 
Tach

der Fehler liegt darin, dass du die Schlaufe zuerst hochzählst und danach den Value auf 0 setzt und dann abfragst ob sie den Wert 10000000 hat (ich würde anstat den Wert fest codieren Max nehmen). Klar hat sie zu diesem Zeitpunkt nicht den Wert Max.

Klaro?

Trancefreak hat gesagt.:
StatusBar1.Panels(1).Text = tmp
ProgressBar1.Value = 0

If ProgressBar1.Value = 10000000 Then
MsgBox "Upload komplett", , "Test"
End If
 
Moin
Danke für die hilfe aber ich verstehe nicht ganz wie du meinst vielleicht kannst du mir da ein beispiel setzen?
gruss patrick
 
Probier mal das. Jetzt wird direkt nach der Schlaufe abgefragt, ob die ProgressBar das Maximum erreicht hat. Ist jedoch ein bisschen unlogisch, da es nach deiner Schlaufe sowieso der Fall sein wird. D.h du bräuchtest gar nicht mehr danach abzufragen, da die ProgressBar zu diesem Zeitpunkt auf jedenfall Max erreicht hat.



Private Sub Command2_Click()

Dim cnt As Long
Dim tmp As String

tmp = StatusBar1.Panels(1).Text
StatusBar1.Panels(1).Text = "Progress ..."

For cnt = 1 To ProgressBar1.Max

ProgressBar1.Value = cnt
DoEvents

Next

If ProgressBar1.Value >= ProgressBar1.Max Then
MsgBox "Upload komplett", , "Test"
End If

StatusBar1.Panels(1).Text = tmp
ProgressBar1.Value = 0
End Sub
 
Zurück