|
Progressbar (Fortschrittsanzeige) Im MS-Office-Forum gab es vor kurzem eine Anfrage, wie man den wohl eine Fortschrittsanzeige implementieren könne. Zu diesem Zweck gibt des ActiveX-Steuerelement Microsoft ProgressBar Control welches in der Version 5.0 in COMCTL32.OCX und in der Version 6.0 in MSCOMCTL.OCX enthalten ist. Es sieht wie folgt aus:
Eine weite nützliche Eigenschaft ist Orientation welche es ermöglicht den Progressbar horizontal oder vertikal darzustellen. Die Eigenschaft Max signalisiert schon, daß der Einsatz des Progressbar nur dann (sinnvoll) möglich ist, wenn vor der Verarbeitung klar ist wie viele Verarbeitungsschritte vorgenommen werden müssen. Das können nun beliebige Größen sein, z.B. die Anzahl von Datensätzen einer Tabelle, die Anzahl von Zeilen in einer Datei oder eine anderer berechneter Wert. Auf keinen Fall sollte man versuchen zeitliche Grenzen abzubilden. Jeder kennt z.B. diese unsägliche Anzeige beim Download von Datei aus dem Internet, die einem prognostiziert der Download währe in 1 Minute 45 Sekunden abgeschlossen und nach 5 Minuten Wartezeit stehen da angeblich noch immer verbleibende 50 Sekunden an. Wenn also die maximale Anzahl von Verarbeitungsschritten klar ist, wird dieser Wert in der Eigenschaft Max des Progressbar eingetragen. In der Eigenschaft Min steht dann (in den meisten Fällen) der Wert 0. Der Fortschritt wird nun durch einfaches Hochzählen der Verarbeitungsschritte und Zuweisung der aktuellen Schrittnummer an den Progressbar, anzeigt. Folgende Beispiele:
Kurz zur Bedienung. Im Feld Anzahl der Verarbeitungsschritte kann die maximale Anzahl der Verarbeitungsschritte angegeben werden (ist ja schließlich ein Beispiel Über den Button Start Verarbeitung wird die Simulation der Verarbeitung für die Anzahl der Verarbeitungsschritte gestartet. Der Code hinter dem Button sieht so aus: Private Sub PbStartProc_Click()
Dim i As Long
'
' Prüfen, ob die Anzahl der Verarbeitungsschritte angegeben wurde.
'
If IsNull(Me.dfAnzWorkSteps) Then
MsgBox "Bitte geben Sie die Anzahl der Arbeitsschritte an", vbCritical, _
"Progressbar Beispiel"
Exit Sub
End If
'
' Wenn eine Anzahl Verarbeitungsschritte angegeben wurde, dann sollte diese > 0 sein
'
If Me.dfAnzWorkSteps <= 0 Then
MsgBox "Bitte geben Sie als Anzahl der Arbeitsschritte eine Wert größer 0 an.", _
vbCritical, "Progressbar Beispiel"
Exit Sub
End If
'
' Max. Anzahl der Schritte an den Progressbar übergeben.
'
Me.ProgBar.Max = Me.dfAnzWorkSteps
'
' Simulieren der Verarbeitung
'
For i = 0 To Me.dfAnzWorkSteps
'
' Aktuellen Arbeitschritt an Progressbar übergeben.
'
Me.ProgBar.Value = i
'
' Den aktuellen Arbeitsschritt in Textfeld ausgeben.
'
Me.dfAktSchritt = i
'
' Prozentualen Fortschritt berechnen und ausgeben.
'
Me.dfFortschritt = Trim(Str((i * 100) \ Me.dfAnzWorkSteps)) & "%"
'
' Prüfen, ob zwischen den simulieren Arbeitsschritten gewartet
' werden soll...
'
If Me.CbWarten Then
'
' wenn ja, dann 1 Sekunde warten
'
Warten 1
Else
'
' wenn nein, dann die Verarbeitung freigeben, damit die
' Anzeigen aktualisiert werden können.
'
DoEvents
End If
Next i
End Sub
Hierbei sind:
Hinweis: Sobald für die Anzeige des Verarbeitungsfortschrittes mehr als nur der Progressbar verwendet wird (im Beispiel die Felder zur Anzeige des aktuellen Arbeitsschrittes und die prozentuale Fortschrittsanzeige) muß zwischen den Verarbeitungsschritten das Kommando DoEvents angegeben werden, um so die Aktualisierung der Textfelder sichtbar zu machen. |
||||||
|