|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| | | | | |
Die Fortschrittsanzeige - geduldigeres Warten
Autor: Christoph Spielmann, Düsseldorf
Gut Ding will Weile haben, denkt sich mancher Programmierer, wenn er bei der Programmierung eines Importvorgangs schon vermutet, dass der spätere Benutzer seines Werks wohl die eine oder andere Tasse Kaffee trinken wird, bis die Daten korrekt in den Tabellen untergebracht sind. Bei länger andauernden Vorgängen ist es sinnvoll, dem Benutzer ehrlich mitzuteilen, dass der Vorgang noch länger dauert. Er wird darauf aufmerksam gemacht, dass etwas passiert, und wartet geduldiger auf den Abschluss der Arbeit.
Stillstand ist Rückschritt
Die denkbar schlechteste Lösung bei der Abarbeitung länger dauernder Vorgänge ist es, dem Benutzer keine Information über den aktuellen Stand zu geben. Generell sollten alle Vorgänge, die länger als drei Sekunden dauern, entsprechend dokumentiert werden.
Bei sehr langen Vorgängen, die beispielsweise mehrere Minuten dauern, sollte dem Benutzer außerdem die geschätzte Restzeit bis zum Ende angezeigt werden. So kann der Benutzer den Vorgang besser einschätzen und ggf. seine Arbeit darauf einstellen.
Die hier vorgestellte Lösung gibt Ihnen die Möglichkeit, sowohl den prozentualen Fortschritt als auch die noch benötigte Restdauer anzeigen zu lassen. Darüber hinaus können Sie den Vorgang abbrechen oder anhalten.

Abb. 1: Die fertige Fortschrittsanzeige
Letzteres ist insbesondere bei sehr langen Importvorgängen sinnvoll, die mehrere Tage dauern und vorzugsweise über Nacht ausgeführt werden sollen.
Tagsüber können Sie den Vorgang anhalten, damit Sie problemlos andere Aufgaben mit Ihrem PC erledigen können. Abb. 1 zeigt Ihnen den Aufbau der fertigen Fortschrittsanzeige.
Erstellen der Fortschrittsanzeige
Damit Sie die Fortschrittsanzeige problemlos in Ihre Datenbanken übernehmen können, ist der Aufbau allgemein gehalten. Aus dem gleichen Grund befindet sich der komplette VBA-Programmcode in dem Formularmodul der Fortschrittanzeige, sodass Sie lediglich ein einzelnes Formular in Ihre Datenbank kopieren müssen.
Zum Erstellen der Fortschrittsanzeige gehen Sie wie folgt vor:
Legen Sie ein neues, ungebundenes Formular an.
Blenden Sie die Navigationsschaltfläche, die Bildlaufleisten, die Min- und Max-Schaltflächen sowie die Schließen-Schaltfläche aus. Die entsprechenden Eigenschaften finden Sie im Eigenschaftenfenster des Formulars.
Stellen Sie die Eigenschaften Automatisch zentrieren, PopUp und Gebunden auf den Wert Ja und die Eigenschaft Rahmenart auf den Wert Dialog ein.
Innerhalb des Formulars platzieren Sie anschließend ein Rechteck. Verwenden Sie dazu das Rechteck-Werkzeug der Toolbox. Geben Sie dem neuen Steuerelement den Namen recFrame. Anschließend geben Sie dem Rahmen eine weiße Hintergrundfarbe sowie einen vertieften Spezialeffekt. Letzteres stellen Sie mit der gleichnamigen Eigenschaft des Rechtecks ein.

Abb. 2: Die Anordnung der Rechtecke zur Darstellung des prozentualen Fortschritts
Innerhalb dieses Frames erstellen Sie ein weiteres Rechteck namens recProgressBar. Färben Sie dieses Rechteck blau ein und passen Sie es pixelgenau in den Frame ein. Die Breite sollte hierbei über den kompletten Frame gehen, was der späteren Darstellung von 100% entspricht. Abb. 2 zeigt Ihnen den Aufbau des Balkens in der Entwurfsansicht.
Praxis-TippBei der Positionierung helfen Ihnen die Pfeiltasten der Tastatur. Bei gedrückt gehaltener Strg-Taste können Sie das markierte Steuerelement pixelweise verschieben. Die Größe ändern Sie, indem Sie zusätzlich die Umschalttaste drücken. (
Anschließend platzieren Sie mittig auf dem Balken ein Bezeichnungsfeld mit transparentem Hintergrund. Geben Sie dem Steuerelement den Namen lblPercent und richten Sie den Inhalt zentriert aus. Als Text geben Sie lediglich einen Punkt ein. Dieser wird später vom Programmcode durch die Prozentangabe ersetzt.

Abb. 3: Das Formular frmProgressBar in der Entwurfsansicht
Danach positionieren Sie unterhalb des Balkens noch zwei Bezeichnungsfelder namens lblTime und lblInfo. Beide Steuerelemente sollten ebenfalls einen transparenten Hintergrund haben. Ersteres zeigt später die noch verbleibende Restzeit an. Das zweite Steuerelement dient der Anzeige eines Textes, der den aktuellen Vorgang dokumentiert.
Abschließend ordnen Sie unterhalb der Bezeichnungsfelder noch zwei Schaltflächen an, die Sie mit Abbrechen und Pause beschriften. Die Namen lauten btnCancel und btnBreak. Daneben setzen Sie noch ein Textfeld namens txtFocus, dessen Höhe und Breite Sie in 0 ändern. Dieses Feld wird dazu benötigt, den Focus von den beiden Schaltflächen wegzubewegen, um diese beispielsweise auszublenden.
Die Designarbeiten sind damit abgeschlossen. Abb. 3 zeigt Ihnen noch einmal das komplette Formular zusammen mit den Formulareigenschaften in der Entwurfsansicht.
Speichern Sie es abschließend unter dem Namen frmProgressBar.
Steuerung der Fortschrittsanzeige
Die Steuerung der Fortschrittsanzeige erfolgt mit Hilfe von VBA-Programmcode. Zur Erfassung des Codes wechseln Sie mit Hilfe des Code-Symbols in den VBA-Editor des Klassenmoduls, das mit dem Formular verbunden ist.
Private Sub SetPercentage(Percent As Integer)
Me.lblPercent.Caption = CStr(Percent) + "%"
If Percent < 50 Then
Me.lblPercent.ForeColor = QBColor(1) 'Blau
Else
Me.lblPercent.ForeColor = QBColor(15) 'Weiß
End If
Me.recProgressBar.Width = m_InitialBarWidth / 100 _ * Percent
m_CurrentPercent = Percent
End Sub
Quellcode 1
Private Sub Form_Load()
m_InitialBarWidth = Me.recProgressBar.Width
End Sub
Quellcode 2
Private Sub SetTime(Percent As Integer)
Dim SecondsForOnePercent As Double
If Percent = 0 Then
Me.lblTime.Caption = "Berechne Restzeit"
Else
SecondsForOnePercent = (Timer - m_StartTimer) / (Percent - m_RestartPercent)
Me.lblTime.Caption = "Restdauer: " + SecondsToTime(Fix((100 - Percent) * SecondsForOnePercent) + 1)
End If
End Sub
Quellcode 3
Im Kopf platzieren Sie die folgenden Deklarationsanweisungen:
Private m_InitialBarWidth As Long
Private m_StartTimer As Long
Private m_MaxSteps As Long
Private m_Cancel As Boolean
Private m_RestartPercent As Integer
|