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


Nur für Abonnenten

Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.

Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.

So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.

Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.

Bereits Abonnent? Hier einloggen


Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →

Schreibe einen Kommentar