Formulare im Blickpunkt

Formulare stehen in Access-Anwendungen eigentlich immer im Blickpunkt. Einige sollen sich aber vielleicht mehr nach vorne drängen als andere. Deshalb erklären wir in diesem Beitrag die verschiedenen Möglichkeiten, Formulare in den Vordergrund zu bringen.

Es ist keine Raketentechnik nötig, um ein Formular in den Vordergrund zu bringen und es dort zu halten, bis der Benutzer es wieder schließt – Sie können sogar leicht verhindern, dass der Benutzer zwischendurch auf die darunter liegenden Formulare zugreift, während das oberste Formular geöffnet ist.

Am einfachsten funktioniert dies, wenn Sie ein Formular mit der DoCmd-Methode OpenForm öffnen und dem Parameter WindowMode den Wert acDialog zuweisen:

DoCmd.OpenForm "Formularname", WindowMode:=acDialog

Ein so geöffnetes Formular stoppt alles Weitere, sogar den aufrufenden Code (sofern dies aus einer Routine heraus geschieht und nicht etwa aus dem Direktfenster) und blockiert auch sämtliche Zugriffe auf die dahinter liegenden Elemente der Access-Benutzeroberfläche (die übrigen Windows-Anwendungen können natürlich weiter bedient werden).

Dies ist äußerst hilfreich, wenn Sie den Benutzer dazu bringen möchten, erst bestimmte Angaben zu machen, bevor der nächste Schritt folgt.

Manchmal wollen Sie aber vielleicht auch nur, dass ein Formular im Vordergrund bleibt, aber nicht den kompletten übrigen Ablauf stört. Das kann zum Beispiel sinnvoll sein, wenn man darin einen Hilfetext anzeigt oder Daten, die für die Arbeit im aktuellen Formular benötigt werden und nicht in diesem angezeigt werden sollen.

Dies erreichen Sie, indem Sie ein Formular auf herkömmliche Weise öffnen und sein Fenster-Objekt mit einem speziellen Status verpassen. Dafür benötigen Sie die folgende API-Funktion:

Private Declare Function SetWindowPos _
Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long

Die wiederum möchten Sie nicht jedesmal mit den ganzen Parametern aufrufen, weshalb wir eine Wrapper-Funktion für den Aufruf mitliefern. Sie verwendet der besseren Lesbarkeit halber einige Konstanten:

Const HWND_TOP = 0
Const HWND_TOPMOST = -1
Const SWP_NOSIZE = 1
Const SWP_NOMOVE = 2

Die Funktion selbst sieht schließlich so aus:

Sub SetWindowOnTop(hWnd As Long)
    SetWindowPos hWnd, HWND_TOP, 0, 0, 0, 0, _
    SWP_NOMOVE Or SWP_NOSIZE
    End Sub

Jeglichen hier vorgestellten Code schreiben Sie übrigens am besten in ein Standardmodul.

Formular On Top …

Nun bearbeiten Sie das Formular, das in der sogenannten Z-Reihenfolge – das ist die Hierarchie unter Windows, die die Tiefenposition eines Fensters beschreibt – ganz oben liegen, aber die übrigen Abläufe nicht blockieren soll. Dort traten Sie in der Routine, die durch das Ereignis Beim Laden ausgelöst wird, die folgende Codezeile ein:

Private Sub Form_Open(Cancel As Integer)
    SetWindowOnTop Me.hWnd
    End Sub

Wenn Sie das Formular nun öffnen (egal wie – ob per OpenForm-Methode oder über das Datenbankfenster), bleibt es im Vordergrund.

… und Formular ganz On Top

Es gibt noch eine Steigerung, was die Position in der Z-Reihenfolge angeht, und die wirkt sich massiv auch auf sonstige geöffnete Anwendungen aus. Fügen Sie dem oben erzeugten Standardmodul noch eine weitere Wrapper-Funktion für die API-Funktion SetWindowPos hinzu, die wie folgt aussieht:

Sub SetWindowOnTopMost(hWnd As Long)
    SetWindowPos hWnd, HWND_TOPMOST, 0, 0, _
    0, 0, SWP_NOMOVE Or SWP_NOSIZE
    End Sub

Der einzige Unterschied zur vorherigen Funktion besteht im zweiten Parameter des Aufrufs, der nun HWND_TOPMOST statt HWND_TOP lautet.

Wenn Sie diese Funktion beim Laden eines Formulars ausführen, sieht das so aus:

Private Sub Form_Open(Cancel As Integer)
    SetWindowOnTopMost Me.hWnd
    End Sub

Nach dem Öffnen des Formulars stellen Sie vermutlich zunächst keinen Unterschied fest. Das kann sich aber schnell ändern, und zwar genau dann, wenn Sie eine andere Anwendung, als Access, aktivieren: Das Fenster bleibt nämlich auch dann an vorderster Position (siehe Bild 1).

pic003.png

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar