Formularposition speichern und wiederherstellen

Wer seinen Anwendern eine Freude machen möchte, liefert ihnen eine ergonomische Anwendung. Ein Faktor, der dazu beitragen kann, ist das Speichern der Position und Größe von Elementen der Benutzeroberfläche und das Wiederherstellen beim erneuten Öffnen. Wie das für Formulare funktioniert, zeigt dieser Beitrag.

Die Position eines Formulars speichern und wiederherstellen Das kann Access doch wohl allein, oder Nein, kann es nicht: Bestenfalls erscheint das Anwendungsfenster von Access an der gleichen Stelle, wenn Sie es erneut öffnen, aber bei der Anzeige von Formularen müssen Sie schon nachhelfen.

Zunächst einmal gibt es verschiedene Möglichkeiten, die Position eines Formulars grundsätzlich zu beeinflussen.

Die einfachste Variante ist das Einstellen der Eigenschaft Automatisch zentrieren auf den Wert Ja, was dazu führt, dass Access ein Formular nach dem Öffnen in der Mitte des Access-Fensters anzeigt (s. Abb. 1).

pic001.png

Abb. 1: Einstellen der Eigenschaft Automatisch zentrieren

Eine weitere Möglichkeit ist das Maximieren des Formulars gleich nach dem Öffnen. Dazu legen Sie eine Prozedur für das Ereignis Beim Öffnen des Formulars an, die wie folgt aussieht:

Private Sub Form_Open(Cancel As Integer)
    DoCmd.Maximize
    End Sub

Das ist nicht immer praktisch, weil die Maximierung sich auch auf alle anderen, nicht als modaler Dialog geöffneten Elemente wie Formulare und Berichte auswirkt.

Auch die Position und die Größe lässt sich mit einer einzigen Anweisung festlegen, und zwar mit der DoCmd-Methode MoveSize. Die folgende Anweisung etwa schiebt das Formular nach ganz links oben und macht es 5.000 x 5.000 Twips groß:

DoCmd.MoveSize 0,0,5000,5000

Wenn Sie einen oder mehrere Werte nicht angeben, behält das Formular die bestehende Position in x- oder y-Richtung beziehungsweise die Breite oder Höhe bei. Für viele Fälle mag es schon ausreichen, wenn ein neues Fenster nicht irgendwo am Rand erscheint, sondern zentriert oder an einer fest definierten Position angezeigt wird. Das gilt insbesondere für modale Dialoge, deren besondere Eigenschaft es ja ist, keinen Zugriff auf die übrigen Elemente der Benutzeroberfläche zuzulassen, bis das Formular wieder geschlossen wurde.

Ganz anders sieht es aus, wenn Sie ein Formular mit ergänzenden Informationen zum aktuell angezeigten Formular öffnen oder wenn ein weiteres Formular Funktionen liefert, die sich auf bereits geöffnete Elemente der Benutzeroberfläche auswirken.

Ein Beispiel ist ein Dialog, der von einem Formular in der Datenblattansicht aus geöffnet wird und einige Suchfelder für dieses Formular anbietet. Dieses möchte der Benutzer vermutlich so anordnen, dass es die für ihn interessanten Spalten oder Zeilen des Suchergebnisses nicht verdeckt.

Wenn der Benutzer diese Suche oft verwendet, möchte er das Formular sicher nicht jedes Mal wieder verschieben, sodass Sie ihm diese Arbeit abnehmen und die Position beim Schließen speichern und sie beim nächsten Öffnen wiederherstellen.

Der Einfachheit halber verwenden wir zu Beispielzwecken einfache Formulare ohne Anzeige von Daten und ohne Suchfunktion. Das erste Formular namens frmBasis ruft dabei das zweite Formular frmOnTop auf und stellt dieses so ein, dass es immer über dem ersten Formular angezeigt wird, auch wenn es den Fokus verliert. Alle Grundlagen dazu finden Sie im Beitrag Formulare im Blickpunkt (Shortlink 654).

Ganz oben

Damit das Formular frmOnTop immer über dem aufrufenden Formular frmBasis angezeigt wird, der Benutzer aber immer noch auf die Steuerelemente von frmBasis zugreifen kann, sind die folgenden Schritte nötig:

  • Stellen Sie die Eigenschaft Popup des Formulars frmOnTop auf Ja ein.
  • Stellen Sie sicher, dass das Modul mdlOnTop sich in der Anwendung befindet.
  • Fügen Sie frmBasis eine Schaltfläche hinzu, die das Formular frmOnTop mit einer ganz normalen DoCmd.OpenForm-Anweisung öffnet.
  • Fügen Sie frmOnTop eine Ereignisprozedur für das Ereignis Beim Öffnen hinzu und ergänzen Sie diese wie folgt:
Private Sub Form_Open(Cancel As Integer)
    SetWindowOnTop Me.hwnd
    End Sub

Der erste Schritt wäre damit geschafft. Die folgenden Schritte könnten wir zwar auch mit einem ganz normal geöffneten Formular durchführen, aber mit der vorliegenden Konstellation haben Sie gleich die Grundlage für praktische Einsatzzwecke.

Position speichern

Nun soll beim Schließen des Formulars seine Position gespeichert werden. Nur, wohin speichern wir diese Die Antwort ist nicht ganz trivial und hängt von den Gegebenheiten ab. Falls es sich um eine Desktop-Anwendung für einzelne Arbeitsplätze handelt, schreiben wir die Daten einfach in eine lokale Tabelle.

Wenn es sich um eine Frontend-Backend-Lösung handelt, bei der jeder Benutzer sein eigenes Frontend verwendet, speichern wir die Formularposition in einer Tabelle im Frontend. Eventuell greifen aber auch mehrere Benutzer auf das gleiche Frontend zu und wollen alle individuellen Positionen speichern – hier werden die Daten am besten in einer Tabelle im Backend abgelegt, die gleichzeitig einen Verweis auf den Benutzer speichert.

Wir halten das Beispiel einfach und gehen von der Einzelplatz-Anwendung und der Speicherung der Positionen in einer einfachen Tabelle aus. Diese heißt tblPositionen und besitzt die in Abb. 2 abgebildeten sechs Felder. Legen Sie außerdem einen eindeutigen Index für das Feld Formularname fest, um zu verhindern, dass für ein Formular gleich mehrere Positionen gespeichert werden können (s. Abb. 3).

pic002.png

Abb. 2: Diese Tabelle speichert die Formularpositionen

pic003.png

Abb. 3: Der eindeutige Schlüssel verhindert, dass mehr als eine Position je Formular gespeichert wird.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access im Unternehmen:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 1.000 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar