Home > Artikel > Ausgabe 6/2016 > Fixierte Formulare

Fixierte Formulare

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wenn Sie Formulare nicht aus speziellen Vorlagen oder aus bereits existierenden über Kopien erstellen, so ist einige Fleißarbeit im Entwurf angesagt, bis die Voreinstellungen von Access für neue Formulare durch Ihre eigenen Designvorstellungen ersetzt sind. Das unterbleibt oft, und so fristet auch die unscheinbare Eigenschaft Verschiebbar häufig ein Schattendasein. Schade, denn sie eröffnet ganz neue Gestaltungsmöglichkeiten für Ihre Datenbank!

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1606_FixedForms.accdb.

Verschiebbarkeit deaktivieren

Um unteren Bereich des Eigenschaftenblatts eines Formulars finden Sie den Eintrag Verschiebbar, den Access zunächst auf den Wert Ja einstellt. Ändern Sie das auf Nein (siehe Bild 1), so kann das Formular zur Laufzeit weder über Maus und Titelzeile auf dem MDI-Arbeitsbereich von Access verschoben werden, noch über Tastenkombinationen oder Tools. Es bleibt an Ort und Stelle. Das funktioniert auch bei Formularen, bei denen die Eigenschaft Popup auf Ja steht. Popup-Formulare sind eigene Fenster, die nicht der Verwaltung des MDI-Arbeitsbereichs unterliegen, und dennoch kann Access sie anweisen, am Desktop festzukleben. Sie sind etwas schwieriger zu handhaben, weil sie leicht durch andere geöffnete Anwendungen oder Access selbst in den Hintergrund geraten.

Die Eigenschaft Verschiebbar eines Formulars

Bild 1: Die Eigenschaft Verschiebbar eines Formulars

Das Formular frmFix der Beispieldatenbank öffnet sich gleich nach deren Start (Bild 2). In seinem Code Beim Laden blendet es zusätzlich den Navigationsbereich aus und außerdem den Ribbon. Von Access bleibt somit nur dessen Rahmen und Titelzeile übrig, und im Arbeitsbereich befindet sich das Formular in der linken oberen Ecke, aus der es auch nicht herausgeholt werden kann. Das Formular schaltet nach 5 Sekunden den Ribbon und Navigationsbereich wieder ein, womit sich die Darstellung aus Bild 3 ergibt. Gibt es nützliche Anwendungsgründe für diese Einstellung?

Am fixierten Modus des Formulars ändert sich auch bei eingeblendetem Ribbon und Navigationsbereich nichts

Bild 2: Am fixierten Modus des Formulars ändert sich auch bei eingeblendetem Ribbon und Navigationsbereich nichts

Das Formular frmFix ist nicht über dessen Titelleiste verschiebbar

Bild 3: Das Formular frmFix ist nicht über dessen Titelleiste verschiebbar

Die in der Regel verschiebbaren Formulare von Access werden spätestens dann unerfreulich, wenn mehrere Formulare in der Oberfläche geöffnet sind. Sie überlappen sich dann unter Umständen, oder ein Maximieren des einen überdeckt das andere. Das kann beim Anwender zu Irritationen führen – vor allem dann, wenn die Daten des einen mit denen das anderen in irgendeiner Weise verknüpft sind. Derlei Missverständnisse räumen Sie aus, wenn Sie Formulare an einem vorbestimmten Ort öffnen lassen und gegebenenfalls nebeneinander oder untereinander positionieren.

Sehr praktisch ist, dass die Eigenschaft Verschiebbar sich auch über VBA steuern lässt (Form.Moveable), und das auch noch zur Laufzeit des Formulars! Sie können also die Modi jederzeit ändern. Das Beispielformular frmFix wartet nach Einblenden des Ribbon nochmals 5 Sekunden und schaltet dann die Eigenschaft Verschiebbar auf Ja, worüber zusätzlich der Schriftzug in ihm informiert:

Me.Moveable = True

Me!LblInfo.Caption = _

"Sie können mich jetzt verschieben!"

Falls Sie interessiert, wie der Code zum Ausblenden von Ribbon und Navigationsbereich aussieht, so sehen Sie sich die Prozedur in Listing 1 an. Übergeben Sie keinen Parameter für UnHide, wodurch der Wert der Variablen automatisch False beträgt, so werden die beiden Elemente ausgeblendet. Bei Übergabe von True werden sie wieder eingeblendet.

Sub ShowNavigationPane(Optional UnHide As Boolean)

     On Error Resume Next

     DoCmd.SelectObject acTable, , True

     If UnHide Then

         RunCommand acCmdWindowUnhide

         DoCmd.ShowToolbar "Ribbon", acToolbarYes

     Else

         RunCommand acCmdWindowHide

         DoCmd.ShowToolbar "Ribbon", acToolbarNo

     End If

End Sub

Listing 1: Ein- und Ausblenden des Ribbon und Navigationsbereichs

Die Routine setzt zunächst den Fokus auf den Navigationsbereich, indem sie die DoCmd-Methode SelectObject aufruft ohne ein Objekt anzugeben. Die RunCommand-Konstante accCmdWindowHide bewirkt allgemein, dass das aktive Fenster in Access ausgeblendet werden soll. Da dies im Moment das eben fokussierte Navigationsfenster ist, verschwindet dieses. Die Konstante accCmdWindowUnhide vollzieht den umgekehrten Vorgang.

Den Ribbon blendet man über die Methode DoCmd.ShowToolbar ein und aus, wobei als Toolbar der Name Ribbon übergeben werden muss, und zusätzlich eine Konstante für den gewünschten Zustand, also entweder acToolbarNo oder acToolbarYes. Die Prozedur können Sie von beliebigem Ort Ihres VBA-Projekt aus aufrufen, und das Formular frmFix tut selbiges in seiner Load-Ereignisprozedur.

Formulare positionieren

Befindet sich ein Formular in nicht verschiebbarem Zustand, so gilt das nur für die manuellen Oberflächeninteraktionen, nicht aber für VBA. Die Methode Move eines Formulars ist weiterhin funktionstüchtig:

Forms("frmFix").Move 0,0, 4000, 3000

oder einfach

Me.Move 0,0, 4000, 3000

Die ersten beiden Parameter der Methode (x, y) geben an, wohin die linke obere Ecke des Formulars wandern soll. Bei normalen Formularen sind diese Werte relativ zum Arbeitsbereich von Access zu verstehen. Bei Popup-Formularen gilt der Desktop als Bezug.

Die beiden weiteren Parameter lassen Größenänderungen des Formulars zu. Hier übergeben Sie die Werte für Breite und Höhe in der Einheit Twips, wobei ein Twip in der Regel 1/15 eines Punkts oder 1/567 eines Zentimeters beträgt. Die angegebene Code-Zeile positioniert also das Formular exakt in die linke obere Ecke und setzt seine Größe neu auf 4000 Twips Breite und 3000 Twips Höhe.

Switchboard

Kommen wir zu einem Beispiel, dass diese VBA-Steuerungen umsetzt. MoveFixedForms in Listing 2 öffnet drei Formulare und positioniert sie, wobei das erste Formular frmFixedBackground eine besondere Bedeutung hat, auf die wir noch zu sprechen kommen.

Sub MoveFixedForms()

     Dim sForm As String

     Dim h As Long, w As Long

     

     CloseAllObjects

     

     sForm = "frmFixBackground"

     DoCmd.OpenForm sForm

     DoCmd.Maximize

     w = Forms(sForm).InsideWidth

     h = Forms(sForm).InsideHeight

     DoCmd.Restore

     DoCmd.MoveSize 0, 0, w, h

     DoEvents

     

     sForm = "frmFix2"

     DoCmd.OpenForm sForm

     Forms(sForm).Moveable = False

     Forms(sForm).Move 3000, 270, 8000, 3300

     sForm = "frmFix3"

     DoCmd.OpenForm sForm

     Forms(sForm).Moveable = False

     Forms(sForm).Move 3000, _

         1200 + Forms("frmFix2").InsideHeight, 8000, 3900

End Sub

Listing 2: Routine zum Öffnen dreier nicht verschiebbarer Formulare mit Positionierungen

Zuerst aber wird die Hilfsroutine CloseAllObjects von ihr aufgerufen, die Sie in Listing 3 finden. Sie schließt alle möglicherweise noch offenen Formulare und Berichte, indem Sie die Auflistung Forms und Reports in zwei Schleifen abwärts zählend durchläuft. Das ist notwendig, weil beim Aufwärtszählen sich die Anzahl der Objekte in Count durch das Schließen derselben jeweils verringern würde. Der Routine kann optional der Boolean-Parameterwert AlsoNavis übergeben werden. Steht er auf True, so wird die bereits in Listing 1 gezeigte Prozedur angestoßen, welche Ribbon und Navigationsbereich ausblendet.

Sub CloseAllObjects(Optional AlsoNavis As Boolean = True)

     Dim i As Long

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!