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

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar