Auf einem zentralen Formular
Den Fortschrittsbalken auf einem zentralen Formular anzeigen
Anstatt nun auf jedem Formular einen Fortschrittsbalken anzulegen, können Sie das auch zentral von einem speziellen Formular erledigen lassen, welches dann kurz eingeblendet wird, so wie Sie das sicherlich von verschiedenen Programmen kennen.
Das neue (und einfach kopierte) Formular frmFortschrittMeldung sieht im Entwurf praktisch ebenso aus wie im vorigen Beispiel, wobei die Schaltfläche nun überflüssig ist. Wichtig ist aber, dass die Formular-Eigenschaft PopUp auf Ja steht, damit es nicht im Vollbild erscheint, sondern klein vor anderen Formularen.
Der Code ändert sich nun so, dass kein Klick-Ereignis und keine Schleife mehr im Formular enthalten ist, sondern lediglich mit der Prozedur Balkenbreite über einen Parameter die Größe des inneren Rechtecks angegeben werden kann:
Private Sub Form_Load()
Me.rctInnen.Width = 0
End Sub
Sub Balkenbreite(dblAnteil As Double)
Me.rctInnen.Width = Me.rctAussen.Width * dblAnteil
Me.rctInnen.BackColor = CLng(32000 * dblAnteil)
With Me.lblProzent
.Caption = Format(dblAnteil, "0.0 %")
.ForeColor = IIf(dblAnteil > 0.5, vbWhite, vbBlack)
End With
Me.Repaint
End SubDie Prozedur darf jetzt nicht mehr als Private gekennzeichnet sein, weil sie sonst von außen nicht sichtbar wäre. Das war für das Klick-Ereignis der Schaltfläche noch sinnvoll, ist es jetzt aber nicht mehr.
Von einem normalen Modul aus wird nun beispielhaft dieses Formular von außen aufgerufen und auch von außen in einer Schleife der Fortschritt verändert.
Das zentrale Fortschrittsformular
Da der normale DoCmd.OpenForm-Aufruf wenig Kontrolle über das aufgerufene Formular ermöglicht, müssen wir uns daran erinnern, dass es sich bei Access-Formularen um Klassen-Objekte handelt. Sie können also auch "ehrlich" wie richtige Klassen instanziiert und zugewiesen werden:
